gpt4 book ai didi

python - 从命名组解析正则表达式

转载 作者:行者123 更新时间:2023-11-28 17:35:46 25 4
gpt4 key购买 nike

这是我正在使用的示例表达式 /api/(?P<version>v[0-9]+)/endpoint .

我想做两件事:

  1. 获取命名组,即 version
  2. 对于命名组,获取与其关联的表达式,即 v[0-9]+

第一部分可以从编译的正则表达式中获取:

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

例如,我想知道是否有任何东西可以让我从已解析的“版本”组中获取表达式。

最佳答案

您可以创建一个采用模板字符串的基本类,一些由 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

关于python - 从命名组解析正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30688212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com