反向引用似乎不起作用

老盖泽

这工作正常:

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

但是以下内容为None:

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

如何找到一对“ a”或“ b”之间的文本?

您需要正确地转义反向引用。该字符串'\1'等于'\x01'正则表达式解析器将不用作反向引用的字符串如果您正确地对其进行了转义,则它可以正常工作:

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

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章