当前位置:  开发笔记 > 编程语言 > 正文

找出Python正则表达式中的捕获组数量

如何解决《找出Python正则表达式中的捕获组数量》经验,为你挑选了2个好方法。

有没有办法确定给定正则表达式中有多少个捕获组?

我希望能够做到以下几点:

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.findallre.search.

sre_parse 看起来像是最强大和最全面的解决方案,但需要树遍历并且看起来有点沉重.

MizardX的正则表达似乎覆盖了所有基础,所以我将继续使用它.



1> Markus Jarde..:
def num_groups(regex):
    return re.compile(regex).groups


这实际上不会返回组的数量,它将返回所有组的元组.为了返回组的​​数量,你需要以下代码(在Python 3.4中):`return len(re.compile(regex).groups())`
@RaziShaban`re.compile(regex).groups`是`int`类型的属性.`re.compile(regex).match(输入).groups()`是一个方法,返回一个`tuple`.

2> 小智..:
f_x = re.search(...)
len_groups = len(f_x.groups())

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有