2015-05-10 93 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