Python正则表达式组:如何获得所有组?

时间:2016-10-20 14:40:13

标签: python regex

我很困惑:

>>> import re
>>> re.match(r"(?P<all>-(?P<one>\w+))*","-ab-cde-fghi-jkl-mn").groups()
('-mn', 'mn')
>>> re.match(r"(?P<all>-(?P<one>\w+)*)","-ab-cde-fghi-jkl-mn").groups()
('-ab', 'ab')

如何获取所有条款的列表,最好是

["ab","cde","fghi","jkl","mn"]

但是

"-ab-cde-fghi-jkl-mn"

也很好。

(请注意,我完全了解str.split("-")。这是关于re - 如何匹配整套的问题

2 个答案:

答案 0 :(得分:4)

re.findall()

示例:

s = "-ab-cde-fghi-jkl-mn"
re.findall(r'[a-z]+', s)

输出:

['ab', 'cde', 'fghi', 'jkl', 'mn']

答案 1 :(得分:2)

默认情况下,它的工作方式与.NET类似。

Python不支持这一点。您在Python中可以获得的最接近的行为是在捕获的子字符串上重复匹配:

>>> match = re.match(r"(?P<all>(?:-(?P<one>\w+))*)","-ab-cde-fghi-jkl-mn")
>>> re.findall(r"-(?P<one>\w+)", match.group("all"))
['ab', 'cde', 'fghi', 'jkl', 'mn']

如果内部模式不是非常简单,它可能会变得复杂。