为什么正则表达式理解 \n 没有 r 前缀?

Why does regular expression understand \n without r prefix?

我已经阅读了很多问题来寻找答案,如果我错过了,抱歉。

假设我的文本只包含换行符。
text ='\n'

因为正则表达式使用反斜杠字符('\')来转义特殊含义的字符,例如Python,我们会像这样使用原始字符串表示法来匹配换行符answer 建议. (如有错误请指正)

所以我们会做 regex = re.compile(r'\n'),正则表达式解析器可以读取一个反斜杠和一个字符 'n' 并将其解释为换行符。

My question is why does regex = re.compile('\n') also work too?

我尝试做regex.match(text),结果是<_sre.SRE_Match object; span=(0, 1), match='\n'>,这与原始字符串表示法相同。


难道是因为here写的文档?其中说:

Most of the standard escapes supported by Python string literals are also accepted by the regular expression parser: \a \b \f \n \r \t \v \x \

谁能详细解释一下?

r'\n' 禁止对字符串文字的解释。这样,它包含两个字符 '\''n'。这两个字符被正则表达式引擎解释为换行序列。在第二种情况下,'\n' 首先转换为换行符序列(即在基于 Unix 的系统上为 LF,即一个字符;或在 Windows 上转换为 CR LF,即两个字符,。 ..).正则表达式编译器将其视为显式给定的字符(没有反斜杠,没有特殊解释)。