1

Python 有这种指定正则表达式模式的方式,其中所有特殊字符都不应该被视为特殊字符。从文档:

所以 r"\n" 是一个包含 '\' 和 'n' 的两个字符的字符串,而 "\n" 是一个包含换行符的一个字符的字符串。

那为什么会这样呢?

import re
print re.split(r"\n", "1\n2\n3")

第一个参数应该是“\”和“n”,第二个参数应该包含两个换行符。但它打印:

['1', '2', '3']
4

1 回答 1

2

第一个确实包含反斜杠和-n,但在正则表达式语言中,反斜杠和-n 表示换行符(就像它在 Python 字符串语法中一样)。也就是说,字符串r"\n"不包含实际的换行符,但它包含告诉正则表达式引擎查找实际换行符的内容。

如果要搜索后跟 n 的反斜杠,则需要使用r"\\n".

原始字符串的关键在于它们阻止了 Python 对字符串转义的基本解释,允许您使用反斜杠来表示其正则表达式的含义。如果您不想要正则表达式的含义,您仍然必须使用两个反斜杠,如我上面的示例所示。但是如果没有原始字符串,情况会更糟:如果您想在没有原始字符串的情况下搜索文字反斜杠-n,则必须使用"\\\\n". 如果原始字符串阻止了正则表达式特殊字符的解释(因此纯文本"\n"实际上意味着反斜杠-n),那么您根本无法使用正则表达式语法。

于 2013-10-05T21:06:11.703 回答