在正则表达式模式之前,'r'是什么意思?

在正则表达式模式之前,'r'是什么意思?

问题描述:

我从documentation找到了正则表达式的以下正则表达式替换示例。我有点困惑,前缀r在字符串之前做了什么?在正则表达式模式之前,'r'是什么意思?

re.sub(r'def\s+([a-zA-Z_][a-zA-Z_0-9]*)\s*\(\s*\):', 
...  r'static PyObject*\npy_\1(void)\n{', 
...  'def myfunc():') 

在字符串文字创建所谓的raw-string文字之前放置rR。原始字符串不会处理转义序列(\n,\b等),因此通常用于正则表达式模式,其中通常包含大量的\字符。

下面是一个演示:

>>> print('\n') # Prints a newline character 


>>> print(r'\n') # Escape sequence is not processed 
\n 
>>> print('\b') # Prints a backspace character 

>>> print(r'\b') # Escape sequence is not processed 
\b 
>>> 

唯一的其他选择是每一个反斜杠加倍:

re.sub('def\\s+([a-zA-Z_][a-zA-Z_0-9]*)\\s*\\(\\s*\\):', 
...  'static PyObject*\\npy_\\1(void)\\n{', 
...  'def myfunc():') 

这仅仅是单调乏味的。

r表示该字符串被视为一个原始字符串,这意味着所有的转义码都将被忽略。

蛇皮文件说这正是:

“的字符串文字可以任选地用一个字母‘R’或‘R’前缀;这样的字符串被称为原始字符串,并使用不同的规则,用于解释反斜杠转义序列”。