Python正则表达式:提取多个匹配组

时间:2015-11-02 23:03:46

标签: python regex

我想匹配一行文本中的最后N位数。我知道我可以使用re.findall简单地提取所有数字然后倒数N但我有兴趣知道我是否可以使用re.match提取N组。我有这个:

line = 'humpty dumpty 25 1, 2, 3, 4, 5, 6'
N = 6
p = re.compile('^(.+)(\D+\d+){{{0}}}$'.format(N))
m = re.match(p, line)

我得到一场比赛OK。但是我想访问1,2,3,4,5,6中的每一个,但我得到的只是:

>>> m = re.match(p, line)
>>> m.group(0)
'humpty dumpty 25 1, 2, 3, 4, 5, 6'
>>> m.group(1)
'humpty dumpty 25'
>>> m.group(2)
', 6'
>>> m.group(3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: no such group

我希望每个数字都能看到一个组。可以按照我尝试的方式使用re.match吗?

感谢。

1 个答案:

答案 0 :(得分:4)

你的问题是,如果你重复组,它只会捕获该组的最后一个实例。你必须为每个你想要的捕获设置一个不同的组。以下这一行有效:

p = re.compile('^(.+)' + '(\D+\d+)'*N + '$')

实施例

>>> m = re.match(p, line)
>>> m.groups()
('humpty dumpty 25', ' 1', ', 2', ', 3', ', 4', ', 5', ', 6')