>>> text =\
... """xyxyxy testmatch0
... xyxyxy testmatch1
... xyxyxy
... whyisthismatched1
... xyxyxy testmatch2
... xyxyxy testmatch3
... xyxyxy
... whyisthismatched2
... """
>>> re.findall("^\s*xyxyxy\s+([a-z0-9]+).*$", text, re.MULTILINE)
[u'testmatch0', u'testmatch1', u'whyisthismatched1', u'testmatch2', u'testmatch3', u'whyisthismatched2']
因此,我的期望是不匹配包含“ whyisthismatched”的行。
Python re文档指出以下内容:
(点)在默认模式下,该字符与除
新队。如果指定了DOTALL标志,则匹配任何
包括换行符的字符。
我的问题是这是否真的是预期的行为或错误。
如果有人期望,请解释为什么这些行是匹配的,以及我应该如何修改我的模式以获得我期望的行为:
[u'testmatch0', u'testmatch1', u'testmatch2', u'testmatch3']
最佳答案
就\s
字符类而言,换行符也是空格。如果只想匹配空格,则需要匹配[ ]
:
>>> re.findall("^\s*xyxyxy[ ]+([a-z0-9]+).*$", text, re.MULTILINE)
[u'testmatch0', u'testmatch1', u'testmatch2', u'testmatch3']