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

时间:2016-06-18 19:19:51

标签: python regex python-3.x string-literals rawstring

我一直在阅读很多问题以找到答案,对不起,如果我错过了。

假设我的文字只包含一个换行符 text ='\n'

因为正则表达式使用反斜杠字符('\')来转义像Python这样的特殊含义字符,所以我们将使用原始字符串表示法匹配新行字符,就像建议的answer一样。 (如果我错了,请纠正我)

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

  

我的问题是为什么regex = re.compile('\n')也有效?

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


是否因为here中写的文件?其中说:

  

正则表达式解析器也接受Python字符串文字支持的大多数标准转义:   \ a \ b \ f \ n   \ r \ t \ v \ x   \\

有人可以详细解释一下吗?

1 个答案:

答案 0 :(得分:1)

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