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']))
稍后,您可以将组名
版本
映射回其regexv[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