Python没有正确解释正则表达式

Python没有正确解释正则表达式,python,regex,Python,Regex,我有以下代码: import re regex = re.compile("(.+?)\1+") results = regex.findall("FFFFFFF") print(results) 预期结果是: ['F'] 根据,正则表达式正在做它应该做的事情(寻找最短的重复子字符串)。但是在python中尝试正则表达式时。为什么会这样?试试看 regex = re.compile(r"(.+?)\1+") 为什么不起作用?你可以通过阅读理解 print r"(.+?)\1+" prin

我有以下代码:

import re

regex = re.compile("(.+?)\1+")
results = regex.findall("FFFFFFF")
print(results)
预期结果是:

['F']
根据,正则表达式正在做它应该做的事情(寻找最短的重复子字符串)。但是在python中尝试正则表达式时。为什么会这样?

试试看

regex = re.compile(r"(.+?)\1+")
为什么不起作用?你可以通过阅读理解

print r"(.+?)\1+"
print "(.+?)\1+"
请参见使用原始字符串:

>>> re.findall("(.+?)\1+", "FFFFFFF")
[]
>>> re.findall(r"(.+?)\1+", "FFFFFFF")
['F']
>>> 
原始字符串文字,即前缀为
'r'
的字符串文字,使反斜杠被视为文字。反斜杠在其他情况下被视为转义序列

引述自:

正则表达式使用反斜杠字符(
'\'
)表示 特殊形式或允许使用特殊字符而无需 援引它们的特殊含义

解决方案是将Python的原始字符串表示法用于正则表达式 表达模式;反斜杠不会以任何特殊方式处理 前缀为
'r'
的字符串文字。所以
r“\n”
是一个两个字符的字符串 包含
\'
'n'
,而
“\n”
是一个单字符字符串 包含换行符的。通常模式将用Python表示 使用此原始字符串表示法的代码

使用原始字符串:

regex = re.compile(r"(.+?)\1+")
或者避开反斜杠:

regex = re.compile(r"(.+?)\\1+")

请在此处发布代码,而不仅仅是作为代码板链接。它可能是一个代码板错误。@Tuga:不,在正则表达式引擎将其解释为转义之前,字符串中的
\1
被Python解释为转义。@MartijnPieters注意!另请参见Python正则表达式Howto。