我正在尝试匹配字符串中的一对数字并将它们分组捕获,但我似乎只能捕获最后一组。
Regex:
(\d\d){1,3}
输入字符串:123456 789101
比赛1:123456
第1组:56
比赛2:789101
第1组:01
我想要的是捕获所有这样的组:
比赛1:123456
第1组:12
第2组:34
第3组:56
*更新
看起来Python不允许你捕获多个组,例如在.NET中你可以在一次传递中捕获所有组,因此re.findall('\ d \ d','123456')可以完成这项工作。
答案 0 :(得分:6)
只使用一个正则表达式就无法做到这一点。这是一个特殊的计数案例,你只能使用正则表达式模式。 \ d \ d会得到你:
第1组:12 第2组:23 第3组:34 ......
python中的regex库带有一个非重叠的例程,即re.findall(),它可以解决这个问题。如:
re.findall('\d\d', '123456')
将返回['12', '34', '56']
答案 1 :(得分:2)
(\d{2})+(\d)?
我不确定python如何处理匹配,但这就是我要做的事情
答案 2 :(得分:2)
试试这个:
import re
re.findall(r'\d\d','123456')
答案 3 :(得分:1)
import re
regx = re.compile('(?:(?<= )|(?<=\A)|(?<=\r)|(?<=\n))'
'(\d\d)(\d\d)?(\d\d)?'
'(?= |\Z|\r|\n)')
for s in (' 112233 58975 6677 981 897899\r',
'\n123456 4433 789101 41586 56 21365899 362547\n',
'0101 456899 1 7895'):
print repr(s),'\n',regx.findall(s),'\n'
结果
' 112233 58975 6677 981 897899\r'
[('11', '22', '33'), ('66', '77', ''), ('89', '78', '99')]
'\n123456 4433 789101 41586 56 21365899 362547\n'
[('12', '34', '56'), ('44', '33', ''), ('78', '91', '01'), ('56', '', ''), ('36', '25', '47')]
'0101 456899 1 7895'
[('01', '01', ''), ('45', '68', '99'), ('78', '95', '')]