以下是我与/api/(?P<version>v[0-9]+)/endpoint
合作的示例表达。
我想做两件事:
version
v[0-9]+
第一部分可以从编译的正则表达式中获取:
>>> r = re.compile('/api/(?P<version>v[0-9]+)/endpoint')
>>> r.groupindex
{'version': 1}
我想知道是否有任何东西可以让我从已解析的版本中获取表达式#39;例如,小组。
答案 0 :(得分:2)
您可以创建一个基本类,它接受一个模板字符串,一些由kwargs(或字典)填充的参数,然后代理对编译的正则表达式对象的所有其他属性访问,例如:
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)
然后使用如下:
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
答案 1 :(得分:0)
您需要自己实现。例如:
group = {'version': 'v[0-9]+'}
r = re.compile('/api/(?P<{}>{})/endpoint'.format('version', group['version']))
稍后您可以将群组名称version
映射回其正则表达式v[0-9]+