理解Python中的(\ D \ d)+正则表达式模式

时间:2018-03-03 00:57:55

标签: python regex python-3.x regex-group

我花了一些时间试图理解Python 3中的Regex术语,但我无法弄清楚(\D\d)+在这里是如何工作的。

我知道\D表示非数字字符,\d表示数字字符,加号+表示前一表达式的一个或多个重复。但是,当我尝试以下代码时,我无法绕过结果。

输入:

import re
text = "a1 b2 c3 d4e5f6"
regex = re.findall(r'(\D\d)+',text)
print(regex)

输出:

['a1', 'b2', 'c3', 'f6']

由于正则表达式包含一个加号,它不应该输出d4e5f6,因为它们是一个非数字和数字字符序列?

1 个答案:

答案 0 :(得分:1)

您不是直接使用\D\d重复+子模式,而是重复包含该子模式的捕获组(用括号表示)。最后的匹配确实是文本d4e5f6,但它是捕获组的三个实例,每个实例都覆盖最后一个。在捕获组存在的情况下,Python re.findall()的行为是它返回THEM(作为元组,如果有多个)而不是整体匹配。

Python 3.x中有一个较新的实验性regex模块,它能够为单个捕获组返回多个匹配项,但我不确定它与findall()的交互方式。您也可以将表达式编写为(?:\D\d)+ - (?:启动非捕获组,这样findall()将为您提供您期望的完整匹配。