小编典典

正则表达式:如何访问一个组的多个匹配项?

python

我正在整理一个相当复杂的正则表达式。表达式的一部分与字符串匹配,例如’+ a’,’-57’等。A+或a-
后跟任意数量的字母或数字。我想匹配0个或更多匹配此模式的字符串。

这是我想出的表达方式:

([\+-][a-zA-Z0-9]+)*

如果我使用这种模式搜索字符串’-56 + a’,我希望得到两个匹配项:

+ a和-56

但是,我只得到返回的最后一场比赛:

>>> m = re.match("([\+-][a-zA-Z0-9]+)*", '-56+a')
>>> m.groups()
('+a',)

查看python文档,我看到:

如果一个组多次匹配,则只能访问最后一个匹配项:

>>> m = re.match(r"(..)+", "a1b2c3")  # Matches 3 times.
>>> m.group(1)                        # Returns only the last match.
'c3'

所以,我的问题是:如何 您可以访问多个小组赛?


阅读 194

收藏
2020-12-20

共1个答案

小编典典

*从您的正则表达式中删除(因此它与您的模式的一个实例完全匹配)。然后使用re.findall(...)re.finditer(请参阅此处)返回所有匹配项。

更新:

听起来您实际上是在构建递归下降解析器。对于相对简单的解析任务,手工完成是相当普遍且完全合理的。如果您对库解决方案感兴趣(例如,以后解析任务可能变得更复杂),请查看pyparsing

2020-12-20