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

Ej.*_*Ej. 2 python regex

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

这里:

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

'+'使得结果RE匹配前一个RE的1次或更多次重复.

所以这是有道理的:

>>>import re
>>>re.findall(r"(\d+)", "1111112")
['1111112']
Run Code Online (Sandbox Code Playgroud)

但这不是:

>>> re.findall(r"(\d)+", "1111112")
['2']
Run Code Online (Sandbox Code Playgroud)

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

Ben*_*ank 10

因为您只有一个捕获组,但它反复"运行",所以新匹配将重复输入该组的"存储空间".换句话说,1当他们被后续的1s "覆盖" 并最终被"覆盖"时,s就会丢失2.

  • 还有非分组括号:尝试r"(?:\ d)+". (2认同)