擅长:python、mysql、java
<p>您需要正确地避开back引用。字符串<code>'\1'</code>等于<code>'\x01'</code>,regex解析器不会将其用作后向引用。如果你能很好地逃脱它,它就会起作用:</p>
<pre><code>>>> re.search('([ab]).+?\\1', 'dfebxxxxxxba')
<_sre.SRE_Match object; span=(3, 11), match='bxxxxxxb'>
</code></pre>
<p>注意,对于正则表达式中大多数有效的转义序列,不需要转义反斜杠。例如<code>\s</code>在字符串中不是有效的转义序列,因此它将像那样传递给regex解析器;其他一些像<code>\n</code>和<code>\t</code>也不重要,因为它们在解析器中是这样的。还有<code>\b</code>(字符串中的bell,regex中的word boundary)和需要转义的back引用。你知道吗</p>
<p>另一种方法是使用原始字符串:</p>
<pre><code>>>> re.search(r'([ab]).+?\1', 'dfebxxxxxxba')
<_sre.SRE_Match object; span=(3, 11), match='bxxxxxxb'>
</code></pre>