【问题标题】:Finding in regex pattern the name of possible groups在正则表达式模式中查找可能组的名称
【发布时间】:2013-12-24 16:56:26
【问题描述】:

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

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

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

【问题讨论】:

  • 你的意思是你想得到DEF_FUNCNAME_FUNCOTHERS?好的,到目前为止你尝试了什么?
  • 是的,我已经更新并澄清了一点我的问题。我什么都没试过,因为我是一个正则表达式的菜鸟。
  • “处理逃逸问题”是什么意思?
  • @DSM 你的回答很棒。通过转义,我只是想r"\?P<DEF_FUNC>def" 之类的东西,它不包含任何要查找的组。

标签: python regex python-3.x


【解决方案1】:

您可以在 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']

【讨论】:

  • 太好了。非常感谢 !我真的需要为 Python 中的正则表达式找到一本好书或教程。
猜你喜欢
  • 2011-05-11
  • 2019-08-09
  • 2015-07-07
  • 2023-03-03
  • 1970-01-01
  • 2016-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多