Python - 原始字符串文字

时间:2015-05-10 22:11:48

标签: python rawstring

我不明白原始字符串文字是如何工作的。我知道在使用z时它会忽略所有特殊内容,例如在执行r时它会将其视为\ n而不是新行。但后来我试着这样做:

\n

它说x = r'\' 而不是'\'

为什么呢?我没弄错吗? 还有什么解释:

SyntaxError: EOL while scanning string literal

2 个答案:

答案 0 :(得分:6)

在原始文字中,反斜杠将转义定义字符串的引号字符。

  

字符串引号可以使用反斜杠转义,但反斜杠   留在字符串中;例如,r"\""是一个有效的字符串文字   由两个字符组成:反斜杠和双引号; r"\"是   不是有效的字符串文字(即使是原始字符串也不能以奇数结尾)   反斜杠的数量)。具体来说,原始字符串不能以a结尾   单反斜杠(因为反斜杠会逃避以下引用   字符)。另请注意,单行反斜杠后跟换行符   解释为这两个字符作为字符串的一部分,而不是作为一个   延续线。

来自the docs

答案 1 :(得分:5)

将单引号放入以单引号开头的字符串的唯一方法是逃避它。因此,当您使用未转义的反斜杠后跟引号字符时,原始和常规字符串文字都将允许转义引号字符。由于要求必须有一种方法来表示以单引号(或双引号)开头的字符串文字中的单引号(或双引号),因此字符串文字'\'不合法,无论您是使用原始还是常规string literal。

要获得具有奇数个文字反斜杠的任意字符串,我认为最好的方法是使用常规字符串文字。这是因为尝试使用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

这个答案只是为了补充另一个。