【问题标题】:Python regular expression: extract multiple matching groupsPython正则表达式:提取多个匹配组
【发布时间】:2016-02-02 23:39:55
【问题描述】:

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

谢谢。

【问题讨论】:

  • 你不能在 Python 中这样使用它。你需要一个单独的方法来做到这一点。

标签: python regex


【解决方案1】:

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

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

示例:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多