返回参考似乎不起作用

时间:2014-12-14 16:07:41

标签: python regex

这很好用:

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

但以下是无:

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

如何在一对'或'之间找到文字?

2 个答案:

答案 0 :(得分:2)

你需要正确地逃避后面的参考。字符串'\1'等于'\x01',正则表达式解析器不会将其用作后引用​​。如果你正确地逃避它,它的作用是:

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

请注意,对于正则表达式中的大多数有效转义序列,您不需要转义反斜杠。例如,\s不是字符串中的有效转义序列,因此它将被传递给正则表达式解析器;像\n\t这样的其他一些要么无关紧要,因为它们与解析器一样。然后有\b(字符串中的铃,正则表达式中的单词边界)和需要转义的后引用。

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

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

答案 1 :(得分:1)

在您的反向引用中使用双\\,如下所示:

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