我正在使用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))
答案 0 :(得分:1)
import re
line = '%one %two %three'
re_rule = re.compile("%(\w+)")
f
result = re_rule.findall(line)
print(result)
输出是:
['one', 'two', 'three']
这里的诀窍是使用findall
。 https://docs.python.org/3/library/re.html#re.regex.findall
re
引擎仅保留重复捕获组的最后一次迭代,但我们可以通过将重复的非捕获组封装在捕获组中来避免此行为,例如
re_rule = re.compile("((?:%\w+\s*)+)")