为什么这没有像我预期的那样工作?
re.findall
不应该在这里返回一个空列表吗?因为我逃避了反斜杠...
>>> r"a\nb" == "a\nb"
False
>>> re.findall(r"a\nb", "a\nb")
['a\nb']
为什么这个额外的反斜杠在这里没有作用?对我来说,第一个返回应该是一个空列表,因为没有斜线后跟 n (
\\n
),而是一条断线 (\n
)...
>>> re.findall("a\\nb", "a\nb")
['a\nb']
>>> re.findall("a\nb", "a\nb")
['a\nb']
那么,如果一个等于另一个,
re.findall
怎么会返回空呢?
>>> r"a\nb" == "a\\nb"
True
>>> re.findall(r"a\nb", "a\\nb")
[]
转义序列
\n
被 Python 字符串文字解析器和正则表达式引擎理解为换行符。因此,在第一个示例中,原始字符串包含文字 \n
,正则表达式引擎将其与字符串中的换行符进行匹配。
为了匹配字符串中的文字
\n
,您需要将反斜杠转义到正则表达式引擎。
>>> re.findall(r"a\\nb", r"a\nb")
['a\\nb']