反向引用似乎不存在

2024-05-10 01:04:22 发布

您现在位置:Python中文网/ 问答频道 /正文

这很好:

>>> re.search("([ab]).+?b",'dfebxxxxxxba').group()
'bxxxxxxb'

但以下没有给出:

>>> re.search("([ab]).+?\1",'dfebxxxxxxba')

如何在一对“a”或“b”之间找到文本?你知道吗


Tags: 文本researchabgroupbxxxxxxbdfebxxxxxxba
2条回答

在back引用中使用double\\,如下所示:

re.search("([ab]).+?\\1",'dfebxxxxxxba').group();
'bxxxxxxb'

您需要正确地避开back引用。字符串'\1'等于'\x01',regex解析器不会将其用作后向引用。如果你能很好地逃脱它,它就会起作用:

>>> re.search('([ab]).+?\\1', 'dfebxxxxxxba')
<_sre.SRE_Match object; span=(3, 11), match='bxxxxxxb'>

注意,对于正则表达式中大多数有效的转义序列,不需要转义反斜杠。例如\s在字符串中不是有效的转义序列,因此它将像那样传递给regex解析器;其他一些像\n\t也不重要,因为它们在解析器中是这样的。还有\b(字符串中的bell,regex中的word boundary)和需要转义的back引用。你知道吗

另一种方法是使用原始字符串:

>>> re.search(r'([ab]).+?\1', 'dfebxxxxxxba')
<_sre.SRE_Match object; span=(3, 11), match='bxxxxxxb'>

相关问题 更多 >