Python正则表达式中缺少组匹配结果

时间:2015-10-26 04:04:14

标签: python regex

请考虑以下代码段:

import re

m = re.match(r'(\d-\w){2,3}', r'1-a2-b')

m.group(0), m.group(1), m.groups()

('1-a2-b', '2-b', ('2-b',))

所以m.group(0)按预期返回整个匹配,但为什么m.group(1)只返回第二次重复'2-b'?第一次重复'1-a'在哪里?

谢谢!

1 个答案:

答案 0 :(得分:2)

因为您仅为重复数量词{2,3}贪婪)之前存在的令牌提供了捕获组,而后者又捕获了最后一个匹配项。因此,还包括捕获组内的重复量化器或范围量化器,并使先前的捕获组成为非捕获组,否则它将产生两个组。试试这个,

((?:\d-\w){2,3})

这与(.)+(.+)

完全相同