在正则表达式模式之前,'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文字之前放置r
或R
。原始字符串不会处理转义序列(\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’前缀;这样的字符串被称为原始字符串,并使用不同的规则,用于解释反斜杠转义序列”。