2015-05-10 148 views
3

我不明白原始字符串文字是如何工作的。我知道在使用r時,它會忽略所有特殊功能,例如在做\n時將其視爲\ n而不是新行。但後來我試着這樣做:Python - 原始字符串文字

x = r'\' 

和它說SyntaxError: EOL while scanning string literal,而不是 '\'

爲什麼呢?我是否正確地忽略了它? 也是究竟是什麼的解釋:

print r'\\' # gives '\\' 
print r'\\\' # gives SyntaxError 

回答

3

將單引號放入以單引號開頭的字符串的唯一方法是將其轉義。因此,無論是原始字符串還是常規字符串文字,當您有非反斜槓後跟引號字符時,都會允許轉義引號字符。由於要求必須有一種方法可以在以單引號(或雙引號)開頭的字符串文本中表示單引號(或雙引號),因此字符串文字'\'不合法,無論使用原始字符串還是常規字符串。

要得到任意字符串與奇數個字符反斜槓,我相信最好的方法是使用常規字符串文字。這是因爲試圖使用r'\\'將工作,但它會給你一個字符串反斜槓而不是一個:

>>> '\\' # A single literal backslash. 
'\\' 
>>> len('\\') 
1 
>>> r'\\' # Two literal backslashes, 2 is even so this is doable with raw. 
'\\\\' 
>>> len(r'\\') 
2 
>>> '\\'*3 # Three literal backslashes, only doable with ordinary literals. 
'\\\\\\' 
>>> len('\\'*3) 
3 

這個答案只是爲了補充另一個。

5

在原始文字反斜槓將難逃被定義字符串的引號字符。

字符串引號可以使用反斜線進行轉義,但反斜槓 保留在字符串中;例如,r「\」「是一個有效的字符串文字 ,由兩個字符組成:反斜槓和雙引號; r」\「是 不是有效的字符串文字(即使原始字符串不能以奇數 特別是原始字符串不能以 單個反斜槓結尾(因爲反斜槓將轉義爲下面的報價 字符)。還要注意,一個反斜槓後跟一個換行符 被解釋爲字符串中的兩個字符,不能作爲 線延續。

the docs