这很好用:
>>> re.search("([ab]).+?b",'dfebxxxxxxba').group()
'bxxxxxxb'
但以下是无:
>>> re.search("([ab]).+?\1",'dfebxxxxxxba')
如何在一对'或'之间找到文字?
答案 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'