python使用正则表达式与组,如何获得所有匹配?

时间:2016-11-02 18:45:56

标签: python

我正在使用python re匹配组。当我使用+时,我似乎“输掉”了第一场比赛。 result.group(1)只能看到最后一个。我确实在result.group(0)中看到了它们,但这并没有真正帮助。有没有办法看到组(1)匹配的所有匹配?

在下面的示例中,我希望组(1)打印%1%2%3,而不是%3

(组(0)不起作用,因为在现实世界中,这是初始匹配后的东西)

import sys
import re

line = '%one %two %three'
re_rule = re.compile("\s*(%\w+\s*)+")

result = re_rule.match(line)
if result:
    print("DBG:", result.group(1))
    print("DBG:", result.group(0))

1 个答案:

答案 0 :(得分:1)

import re

line = '%one %two %three'
re_rule = re.compile("%(\w+)")
f
result = re_rule.findall(line)

print(result)

输出是:

['one', 'two', 'three']

这里的诀窍是使用findallhttps://docs.python.org/3/library/re.html#re.regex.findall

re引擎仅保留重复捕获组的最后一次迭代,但我们可以通过将重复的非捕获组封装在捕获组中来避免此行为,例如

re_rule = re.compile("((?:%\w+\s*)+)")