【发布时间】:2023-03-14 11:09:01
【问题描述】:
当我在使用 Python 3.6 时在 re.finditer() 中使用 re.DOTALL 时,我得到了奇怪的结果。 我不知道这是否是预期的操作,或者我是否遗漏了什么或者它是否是一个错误。
案例 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
我用 re.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'
仅此而已。
【问题讨论】:
-
如果您不想匹配空字符串,请使用
.+而不是.*。
标签: python regex pattern-matching newline flags