我從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():')
我從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’前綴;這樣的字符串被稱爲原始字符串,並使用不同的規則,用於解釋反斜槓轉義序列」。