捕获组是如何工作的?(与Python正则表达式相关)
在使用正则表达式解决一个问题时,我遇到了一些让我困惑的情况,这个问题出现在Python Challenge上。
根据这里的说明:
(...) 表示匹配括号内的任何正则表达式。
而
'+' 表示匹配前面那个正则表达式出现1次或多次。
所以这个是可以理解的:
>>>import re
>>>re.findall(r"(\d+)", "1111112")
['1111112']
但这个就不太明白了:
>>> re.findall(r"(\d)+", "1111112")
['2']
我明白了,findall函数只有在正则表达式中有分组时才会返回这些分组,但为什么只返回了'2'呢?那些匹配中的所有'1'都去哪了?
2 个回答
1
你在')'后面加了一个'+',这就让你重复了这个组。我不太清楚具体的实现细节,但它会匹配7次,只返回最后一次匹配的结果。
在第一个匹配中,你是匹配了7个数字,并把它们放在一个组里。
10
因为你只有一个捕获组,但它被“运行”多次,所以新的匹配结果会不断地被放进这个组的“存储空间”里。换句话说,之前的1
被后来的1
覆盖了,最后又被2
覆盖掉了,所以之前的1
就没了。