与命名组关联的模式

时间:2014-01-26 16:47:36

标签: python regex

以下代码给出了模式中使用的所有命名组。

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+

有没有一种棘手的方法可以通过模式文本中的正则表达式搜索“手头”来做到这一点?

1 个答案:

答案 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