当前位置: 首页 > 知识库问答 >
问题:

python正则表达式:“(?P……)”是什么意思[重复]

丌官哲彦
2023-03-14
line_re = re.compile(r'(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2})\s+(\S+):\s+(?P<name>.*)')

我正在试图理解?p 是什么意思。即使我将其删除,该表达式的工作原理也是一样的,即:

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 是什么?

共有1个答案

祁俊喆
2023-03-14

re模块文档中:

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

因此,它本质上与您更改的模式相同,只是现在您不能再通过名称和编号访问该模式了。

要理解它们的区别,我建议您阅读正则表达式howto中的非捕获组和命名组。

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

 类似资料: