2009-11-19 11 views

回答

3

當一個字符串必須包含與之相同的引號字符時,轉義該字符是唯一可用的解決方法 - 所以設計的替代方案是要麼使原始字符串文字無法包含其引導引號字符,要麼保留即使在字符串文字中,「反向間隙轉義」約定也適用於引用字符。由於原始字符串文字是爲便捷地表示正則表達式模式而設計的(不適用於DOS/Windows路徑!),而在RE模式中,後綴反斜槓從不必要,所以設計決策很容易(基於真實用於原始字符串的用例)。

+0

一個很好的補充是這篇博客文章http://pythonconquerstheuniverse.wordpress.com/2008/06/04/gotcha-%E2%80%94-backslashes-in-windows-filenames/ – 2010-04-19 15:13:47

1

使用"c:/""c:\\"。原始字符串文字用於轉義轉義序列,不包括字面反斜槓,雖然它們以這種方式工作,但在這種情況下除外。

1

其中一個已知的案例我認爲,更好地使用「c:\\」的情況下。

+0

但r「c:\\」被解釋爲'c:\\\\' – 2009-11-19 16:02:57

+3

這可能是爲什麼Mark說「c:\\」而不是「r」c:\\「'。 – 2009-11-19 16:47:15

+1

我必須承認,我誤讀 – 2009-11-21 13:34:27

1

documentation

...原始字符串不能以一個反斜線結束(因爲反斜槓將難逃以下引號字符)。

0

即使原始字符串,\"導致"不被解釋爲字符串的結束(雖然反斜槓進入你的字符串),所以r"foo\"bar"將是一個合法的字符串。編寫正則表達式時非常方便,但對於寫入路徑不是很好。

這不是什麼大問題,因爲大部分時間你應該使用os.path和其他模塊來處理你的路徑。

0

在設計和歷史FAQ發現http://docs.python.org/faq/design.html#why-can-t-raw-strings-r-strings-end-with-a-backslash

原始字符串旨在緩解希望 做自己的反斜槓轉義 處理處理器(主要是 正則表達式引擎) 創建輸入。這樣的處理器認爲 無可匹敵的尾部反斜槓是 一個錯誤,所以原始字符串 不允許這樣做。作爲回報,他們允許您通過用 反斜槓轉義字符串報價 字符來傳遞 字符。當 r字符串用於其預期的 目的時,這些規則運作良好。