为什么以下模式字符串会导致匹配“ A cat”而不是“ hat”,因为默认情况下匹配是贪婪的?
>>> m = re.match(r'(\w+) (\w+)', "A cat jumpped over a hat")
>>> m
<_sre.SRE_Match object; span=(0, 5), match='A cat'>
有人可以给他们一些启发吗?
答案 0 :(得分:2)
从official Python documentation on regexes
re.match()
仅在字符串开头检查匹配项
答案 1 :(得分:1)
如果字符串开头的零个或多个字符与正则表达式模式匹配,则返回相应的匹配对象。如果字符串与模式不匹配,则返回None;否则返回false。请注意,这与零长度匹配不同。
答案 2 :(得分:0)
正如其他人所提到的,re.match
从要匹配的字符串的开头开始,并且仅检查必要的内容。请注意,对象字符串表示形式末尾的match='A cat'
表示匹配的内容:r'(\w+) (\w+)'
中的"A cat jumpped over a hat"
。
如果要在模式的末尾添加$
,表示要匹配的字符串应在此结束,则不会导致匹配。如果您采用相同的模式并将其缩短为仅两个单词,它将再次匹配:
>>> re.match(r'(\w+) (\w+)', "A cat jumpped over a hat")
<_sre.SRE_Match object; span=(0, 5), match='A cat'>
>>> re.match(r'(\w+) (\w+)$', "A cat jumpped over a hat")
>>> re.match(r'(\w+) (\w+)$', "A cat")
<_sre.SRE_Match object; span=(0, 5), match='A cat'>