Python 从命名组解析正则表达式

Python 从命名组解析正则表达式,python,regex,Python,Regex,下面是我正在使用的一个示例表达式/api/(?Pv[0-9]+)/endpoint 我想做两件事: 获取命名组,即version 对于命名组,获取与其关联的表达式,即v[0-9]+ 可以从已编译的正则表达式中获取第一部分: >>> r = re.compile('/api/(?P<version>v[0-9]+)/endpoint') >>> r.groupindex {'version': 1} r=re.compile('/api/(?Pv

下面是我正在使用的一个示例表达式
/api/(?Pv[0-9]+)/endpoint

我想做两件事:

  • 获取命名组,即
    version
  • 对于命名组,获取与其关联的表达式,即
    v[0-9]+
  • 可以从已编译的正则表达式中获取第一部分:

    >>> r = re.compile('/api/(?P<version>v[0-9]+)/endpoint')
    >>> r.groupindex 
    {'version': 1}
    
    r=re.compile('/api/(?Pv[0-9]+)/endpoint') >>>r.groupindex {'version':1}
    例如,我想知道是否有什么东西可以让我从解析的“version”组中获取表达式。

    您需要自己实现它。例如:

    group = {'version': 'v[0-9]+'}
    r = re.compile('/api/(?P<{}>{})/endpoint'.format('version', group['version']))
    
    group={'version':'v[0-9]+'}
    r=re.compile('/api/(?P{})/endpoint'.format('version',group['version']))
    

    稍后,您可以将组名
    版本
    映射回其regex
    v[0-9]+

    您可以创建一个基本类,该类使用模板字符串、kwargs(或字典)填充的一些参数,然后代理对已编译regex对象的所有其他属性访问,例如:

    import re
    
    class myre(object):
        def __init__(self, template, *args, **kwargs):
            self.expressions = dict(kwargs)
            subs = {k: '(?P<{}>{})'.format(k, v) for k, v in self.expressions.items()}
            self.rx = re.compile(template.format(**subs), *args)
        def __getattr__(self, name):
            return getattr(self.rx, name)
    

    我不认为有re方法可以做到这一点。我想你可以使用regex来解析你的regex?@vaultah:为什么不呢,但是re模块是不可能的。@vaultah对-这是我看到的唯一途径,但我觉得一定有办法。@NirvanaTikku不-不可能使用内置
    re
    模块
    r = myre('/api/{version}/endpoint', version='v[0-9]+')
    print r.expressions['version'] # get expression for named group
    # v[0-9]+
    
    print list(r.expressions) # get list of named groups
    # ['version']
    
    # match as normal
    print r.match('/api/v5/endpoint').group('version')
    # v5