捕获组如何工作? (wrt python正则表达式)

时间:2009-05-14 00:27:53

标签: python regex

使用正则表达式来帮助解决Python Challenge中的问题时,我遇到了一些使我感到困惑的行为。

来自here

(...)匹配括号内的正则表达式。

'+'导致生成的RE匹配前一个RE的1次或多次重复。

所以这是有道理的:

>>>import re
>>>re.findall(r"(\d+)", "1111112")
['1111112']

但这不是:

>>> re.findall(r"(\d)+", "1111112")
['2']

我意识到当正则表达式中存在组时,findall只返回组,但为什么只返回'2'?比赛中所有1的发生了什么?

2 个答案:

答案 0 :(得分:10)

由于您只有一个捕获组,但它反复“运行”,因此新匹配将重复输入该组的“存储空间”。换句话说,1在被后续1“覆盖”并最终被2覆盖时丢失了。

答案 1 :(得分:1)

你通过在')'之后附加'+'来重复组本身,我不知道实现细节,但它匹配7次,并且只返回最后一个匹配。

在第一个中,您匹配7位数字,并使其成为一个组。