python正则表达式:&#34;(?P <name> ...)&#34;意味着</名称>

时间:2014-08-22 11:06:10

标签: python regex

我有以下正则表达式模式:

line_re = re.compile(r'(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2})\s+(\S+):\s+(?P<name>.*)')

我想了解?P<name>的含义。即使我删除它,表达式也是一样的,即:

line_re = re.compile(r'(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2})\s+(\S+):\s+(.*)')

我知道我可以用match.group(3)引用匹配的模式。什么是?P<name>

1 个答案:

答案 0 :(得分:2)

来自re module documentation

  

(?P<name>...)
  与常规括号类似,但组匹配的子字符串可通过符号组名称名称访问。组名必须是有效的Python标识符,并且每个组名只能在正则表达式中定义一次。符号组也是一个编号组,就像该组未被命名一样。

因此,它与您更改模式的内容基本相同,但现在您无法再按名称和数字访问该模式。

为了理解差异,我建议您在正则表达式HOWTO 中阅读Non-capturing And Named Groups

您可以通过将名称传递给MatchObject.group() method来访问命名组,或者使用MatchObject.groupdict()获取包含所有命名组的字典;这本词典不包括位置组。