Skip to main content
 首页 » 编程设计

Python 正则表达式 : extract multiple matching groups

2025年05月04日63over140

我想匹配一行文本中的最后 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) 

我匹配成功了。但是我想访问 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 吗?

谢谢。

请您参考如下方法:

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

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

示例:

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