捕获组是如何工作的?(与Python正则表达式相关)

2 投票
2 回答
729 浏览
提问于 2025-04-15 11:34

在使用正则表达式解决一个问题时,我遇到了一些让我困惑的情况,这个问题出现在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就没了。

撰写回答