有没有办法确定给定正则表达式中有多少个捕获组?
我希望能够做到以下几点:
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的建议,我换成re.findall
了re.search
.
sre_parse
看起来像是最强大和最全面的解决方案,但需要树遍历并且看起来有点沉重.
MizardX的正则表达似乎覆盖了所有基础,所以我将继续使用它.
def num_groups(regex): return re.compile(regex).groups
f_x = re.search(...) len_groups = len(f_x.groups())