有关Python正则表达式的问题

时间:2019-01-11 01:17:00

标签: python regex

为什么以下模式字符串会导致匹配“ 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'>

有人可以给他们一些启发吗?

3 个答案:

答案 0 :(得分:2)

official Python documentation on regexes

  

re.match()仅在字符串开头检查匹配项

答案 1 :(得分:1)

来自official document

  

如果字符串开头的零个或多个字符与正则表达式模式匹配,则返回相应的匹配对象。如果字符串与模式不匹配,则返回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'>