代码之家  ›  专栏  ›  技术社区  ›  P Moran

窃听器重新查找()功能和关于DOTALLpython3.6的re模块中的标志?[副本]

  •  0
  • P Moran  · 技术社区  · 6 年前

    当我使用关于DOTALL在重新查找()使用Python 3.6时。 我不知道这是不是预期的操作,或者我遗漏了什么,或者是一个bug。

    案例1

    我尝试使用嵌入换行符的字符串的这个版本。

    我希望得到2个匹配的值:m1='abc'和m2='de'

    import re
    result = re.finditer('.*', 'abc\n de', flags=0)
    m1 = result.__next__()
    #    <_sre.SRE_Match object; span=(0, 3), match='abc'>
    m2 = result.__next__()
    #    <_sre.SRE_Match object; span=(3, 3), match=''>
    m3 = result.__next__()
    #    <_sre.SRE_Match object; span=(4, 7), match=' de'>
    m4 = result.__next__()
    #    <_sre.SRE_Match object; span=(7, 7), match=''>
    

    m2和m4的匹配值是多少?

    案例2

    我用这个试试关于DOTALL,我希望得到一个匹配,m1='abc\n de'

    result = re.finditer('.*', 'abc\n de', flags=re.DOTALL)
    m1 = result.__next__()
    #     <_sre.SRE_Match object; span=(0, 7), match='abc\n de'>
    m2 = result.__next__()
    #     <_sre.SRE_Match object; span=(7, 7), match=''>
    

    额外的火柴怎么了?如何使结果按预期工作?

    m1 = 'abc'
    m2 = ' de'
    

    ... 第二个案子回来了

    m1 = 'abc\n de'
    

    没有别的了。

    1 回复  |  直到 6 年前
        1
  •  1
  •   CertainPerformance    6 年前

    你的模式是

    .*
    

    m2 m4 .* ,因此第一个匹配

    span=(0, 3)
    

    span=(3, 3)
    

    同样的事情也在发生 span=(7, 7) 在里面 m4级 DOTALL 代码。

    听上去你想要一个匹配只有在 至少一个字符 -用重复 + 而不是 * :

    re.finditer('.+', 'abc\n de')