有没有办法确定给定的正则表达式中有多少个捕获组?
我希望能够做到以下几点:
def groups(regexp, s):
""" Returns the first result of re.findall, or an empty default
>>> groups(r (d)(d)(d) , 123 )
( 1 , 2 , 3 )
>>> groups(r (d)(d)(d) , abc )
( , , )
"""
import re
m = re.search(regexp, s)
if m:
return m.groups()
return ( ,) * num_of_groups(regexp)
这让我可以做一些事情,比如:
first, last, phone = groups(r (w+) (w+) ([d-]+) , John Doe 555-3456 )
然而,我不知道如何实现num_of_groups
。(目前我只是围绕它工作。)
编辑:按照rslite的建议,我用重新搜索
替换了的重新查找
。
sre_parse
似乎是最健壮、最全面的解决方案,但需要遍历树,而且似乎有点重。
MizardX的正则表达式似乎涵盖了所有的基,所以我将使用它。