【发布时间】:2010-09-12 17:26:28
【问题描述】:
有没有办法确定给定正则表达式中有多少个捕获组?
我希望能够做到以下几点:
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。 (目前我只是解决它。)
编辑:在advice from rslite 之后,我将re.findall 替换为re.search。
sre_parse 似乎是最强大和最全面的解决方案,但需要遍历树,而且似乎有点重。
MizardX 的正则表达式似乎涵盖了所有基础,所以我将继续使用它。
【问题讨论】: