关于Python正则表达式的问题

关于Python正则表达式的问题,python,regex,Python,Regex,既然默认情况下匹配是贪婪的,为什么下面的模式字符串会导致匹配“一只猫”而不是“一顶帽子” >>> m = re.match(r'(\w+) (\w+)', "A cat jumpped over a hat") >>> m <_sre.SRE_Match object; span=(0, 5), match='A cat'> >>m=re.match(r'(\w+)(\w+),“一只猫跳过一顶帽子”) >>>m 有人能给他们解释一下吗?从 re

既然默认情况下匹配是贪婪的,为什么下面的模式字符串会导致匹配“一只猫”而不是“一顶帽子”

>>> m = re.match(r'(\w+) (\w+)', "A cat jumpped over a hat")
>>> m
<_sre.SRE_Match object; span=(0, 5), match='A cat'>
>>m=re.match(r'(\w+)(\w+),“一只猫跳过一顶帽子”)
>>>m
有人能给他们解释一下吗?

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

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

发件人:

如果字符串开头的零个或多个字符与正则表达式模式匹配,则返回相应的匹配对象。如果字符串与模式不匹配,则返回None;请注意,这与零长度匹配不同

发件人:

如果字符串开头的零个或多个字符与正则表达式模式匹配,则返回相应的匹配对象。如果字符串与模式不匹配,则返回None;请注意,这与零长度匹配不同


正如其他人所提到的,
re.match
从要匹配的字符串的开头开始,只检查必要的内容。请注意,对象字符串表示末尾的
match='A cat'
表示匹配的内容:
r'(\w+)(\w+)
“一只猫跳过一顶帽子”

如果要在模式的末尾添加一个
$
,指示要匹配的字符串应该在那里结束,则不会导致匹配。如果你采用相同的模式,将其缩短为两个单词,它将再次匹配:

>>> 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'>
重新匹配(r'(\w+)(\w+),“一只猫跳过一顶帽子”) >>>关于match(r'(\w+)(\w+$),“一只猫跳过一顶帽子”) >>>关于匹配(r'(\w+)(\w+$),“一只猫”)
正如其他人所提到的,
re.match
从要匹配的字符串的开头开始,只检查必要的内容。请注意,对象字符串表示末尾的
match='A cat'
表示匹配的内容:
r'(\w+)(\w+)
“一只猫跳过一顶帽子”

如果要在模式的末尾添加一个
$
,指示要匹配的字符串应该在那里结束,则不会导致匹配。如果你采用相同的模式,将其缩短为两个单词,它将再次匹配:

>>> 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'>
重新匹配(r'(\w+)(\w+),“一只猫跳过一顶帽子”) >>>关于match(r'(\w+)(\w+$),“一只猫跳过一顶帽子”) >>>关于匹配(r'(\w+)(\w+$),“一只猫”)
第一组匹配
A
,空格匹配一个空格,第二组匹配
cat
——到底为什么它看起来会更远Greediness'影响匹配的可能长度,而不是它的起始位置-非贪婪版本的正则表达式将匹配
a c
。在正则表达式中,
\w
匹配任何“单词”字符(字母、数字或下划线)。实际上,您的正则表达式是在说“查找至少有一个字符的单词后跟空格的情况,然后是至少有一个字符的另一个单词”。你没有在正则表达式中做任何特定的限制,明白了。也许它应该被描述为:match()是贪婪的,但在第一次匹配时就停止了?第一组匹配
A
,空格匹配一个空格,第二组匹配
cat
——为什么它会看起来更远Greediness'影响匹配的可能长度,而不是它的起始位置-非贪婪版本的正则表达式将匹配
a c
。在正则表达式中,
\w
匹配任何“单词”字符(字母、数字或下划线)。实际上,您的正则表达式是在说“查找至少有一个字符的单词后跟空格的情况,然后是至少有一个字符的另一个单词”。你没有在正则表达式中做任何特定的限制,明白了。也许应该这样描述:match()是贪婪的,但在第一次匹配时停止?