我有以下正则表达式模式:
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>
?
答案 0 :(得分:2)
(?P<name>...)
与常规括号类似,但组匹配的子字符串可通过符号组名称名称访问。组名必须是有效的Python标识符,并且每个组名只能在正则表达式中定义一次。符号组也是一个编号组,就像该组未被命名一样。
因此,它与您更改模式的内容基本相同,但现在您无法再按名称和数字访问该模式。
为了理解差异,我建议您在正则表达式HOWTO 中阅读Non-capturing And Named Groups。
您可以通过将名称传递给MatchObject.group()
method来访问命名组,或者使用MatchObject.groupdict()
获取包含所有命名组的字典;这本词典不包括位置组。