在正则表达式模式中查找可能的组的名称

时间:2013-12-24 16:56:27

标签: python regex python-3.x

让我们考虑稍后用于定义模式的字符串r"(?P<DEF_FUNC>def (?P<NAME_FUNC>\w+)\s*\((.*?)\):)|(?P<OTHERS>\w+)"

我想在这个字符串中找到用于从正则表达式的角度定义组的名称。此处,此名称为DEF_FUNCNAME_FUNCOTHERS

如何通过处理逃避问题来实现这一目标?

1 个答案:

答案 0 :(得分:2)

您可以在groupindex词典中找到它们(请参阅文档here):

>>> import re
>>> rstr = r"(?P<DEF_FUNC>def (?P<NAME_FUNC>\w+)\s*\((.*?)\):)|(?P<OTHERS>\w+)"
>>> regex = re.compile(rstr)   
>>> regex.groupindex
{'DEF_FUNC': 1, 'OTHERS': 4, 'NAME_FUNC': 2}

如果你想按价值顺序执行常规技巧:

>>> sorted(regex.groupindex, key=regex.groupindex.get)
['DEF_FUNC', 'NAME_FUNC', 'OTHERS']