有没有办法确定给定正则表达式中有多少个捕获组?
我希望能够做到以下几点:
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)
Run Code Online (Sandbox Code Playgroud)
这允许我做的事情:
first, last, phone = groups(r'(\w+) (\w+) ([\d\-]+)', 'John Doe 555-3456')
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何实施num_of_groups.(目前我只是解决它.)
编辑:按照rslite的建议,我换成re.findall了re.search.
sre_parse 看起来像是最强大和最全面的解决方案,但需要树遍历并且看起来有点沉重.
MizardX的正则表达似乎覆盖了所有基础,所以我将继续使用它.
Mar*_*rot 38
def num_groups(regex):
return re.compile(regex).groups
Run Code Online (Sandbox Code Playgroud)
小智 17
f_x = re.search(...)
len_groups = len(f_x.groups())
Run Code Online (Sandbox Code Playgroud)