以下代码给出了模式中使用的所有命名组。
import re
pattern = r"(?P<DEF_FUNC>def (?P<NAME_FUNC>\w+)\s*\((.*?)\):)|(?P<OTHERS>\w+)"
regex = re.compile(pattern)
for name in sorted(
regex.groupindex,
key = regex.groupindex.get
):
print(name)
这是相应的输出。
DEF_FUNC
NAME_FUNC
OTHERS
我想也有相应的模式,以获得以下输出。
DEF_FUNC --> def (?P<NAME_FUNC>\w+)\s*\((.*?)\)
NAME_FUNC --> \w+
OTHERS --> \w+
有没有一种棘手的方法可以通过模式文本中的正则表达式搜索“手头”来做到这一点?
答案 0 :(得分:1)
您可以查看sre_parse:
import re, sre_parse
pattern = r"(?P<DEF_FUNC>def (?P<NAME_FUNC>\w+)\s*\((.*?)\):)|(?P<OTHERS>\w+)"
v = sre_parse.parse(pattern)
print v.pattern.groupdict # sub-pattern id of each group
#print v.dump()
print v.data # find the subgroups and match the ids