使用正则表达式来帮助解决Python Challenge中的问题时,我遇到了一些使我感到困惑的行为。
来自here:
(...)匹配括号内的正则表达式。
和
'+'导致生成的RE匹配前一个RE的1次或多次重复。
所以这是有道理的:
>>>import re
>>>re.findall(r"(\d+)", "1111112")
['1111112']
但这不是:
>>> re.findall(r"(\d)+", "1111112")
['2']
我意识到当正则表达式中存在组时,findall只返回组,但为什么只返回'2'?比赛中所有1的发生了什么?
答案 0 :(得分:10)
由于您只有一个捕获组,但它反复“运行”,因此新匹配将重复输入该组的“存储空间”。换句话说,1
在被后续1
“覆盖”并最终被2
覆盖时丢失了。
答案 1 :(得分:1)
你通过在')'之后附加'+'来重复组本身,我不知道实现细节,但它匹配7次,并且只返回最后一个匹配。
在第一个中,您匹配7位数字,并使其成为一个组。