从技术上讲,任何奇数个反斜杠,如文档中所述。

>>> r'\'
  File "<stdin>", line 1
    r'\'
       ^
SyntaxError: EOL while scanning string literal
>>> r'\\'
'\\\\'
>>> r'\\\'
  File "<stdin>", line 1
    r'\\\'
         ^
SyntaxError: EOL while scanning string literal

解析器似乎只能将原始字符串中的反斜杠视为常规字符(原始字符串不就是这样吗?),但我可能忽略了一些明显的东西。


当前回答

为了让你用斜杠结束一个原始字符串,我建议你可以使用这个技巧:

>>> print r"c:\test"'\\'
test\

它使用Python中字符串字面值的隐式连接,并将一个用双引号分隔的字符串与另一个用单引号分隔的字符串连接起来。丑,但有用。

其他回答

原因在这一节中用粗体标出的部分解释了:

String quotes can be escaped with a backslash, but the backslash remains in the string; for example, r"\"" is a valid string literal consisting of two characters: a backslash and a double quote; r"\" is not a valid string literal (even a raw string cannot end in an odd number of backslashes). Specifically, a raw string cannot end in a single backslash (since the backslash would escape the following quote character). Note also that a single backslash followed by a newline is interpreted as those two characters as part of the string, not as a line continuation.

原始字符串不是100%原始的,仍然有一些基本的反斜杠处理。

尽管它的作用,即使是原始字符串也不能以单个结尾 反斜杠,因为反斜杠转义了下面的引号 字符—您仍然必须转义周围的引号字符到 将它嵌入到字符串中。也就是r"…“不是一个有效的字符串 字面量——原始字符串不能以奇数个反斜杠结尾。 如果需要用一个反斜杠结束原始字符串,可以使用 两个,切掉第二个。

另一位后来删除了他们的答案的用户(不确定他们是否愿意被归功于自己)建议,Python语言设计人员可以使用相同的解析规则,并在事后将转义字符扩展为原始形式(如果文字被标记为原始),从而简化解析器设计。

我认为这是一个有趣的想法,并将其作为社区维基供子孙后代使用。

另一个技巧是使用chr(92),因为它的计算结果是“\”。

我最近不得不清理一串反斜杠,下面的技巧做到了:

CleanString = DirtyString.replace(chr(92),'')

我意识到这并没有考虑到“为什么”,但这条线索吸引了许多人寻找一个即时问题的解决方案。

一些建议:

1)如果你需要操作反斜杠的路径,那么标准的python模块os。道路是你的朋友。例如:

os.path.normpath (c: / folder1 /)

2)如果你想构建带有反斜杠的字符串,但在字符串的末尾没有反斜杠,那么原始字符串是你的朋友(在你的字面字符串之前使用'r'前缀)。例如:

r'\one \two \three'

3)如果你需要在变量X中添加一个反斜杠前缀,那么你可以这样做:

X='dummy'
bs=r'\ ' # don't forget the space after backslash or you will get EOL error
X2=bs[0]+X  # X2 now contains \dummy

4)如果你需要创建一个带有反斜杠的字符串,那么结合提示2和3:

voice_name='upper'
lilypond_display=r'\DisplayLilyMusic \ ' # don't forget the space at the end
lilypond_statement=lilypond_display[:-1]+voice_name

现在lilypond_statement包含“\DisplayLilyMusic \upper”

巨蟒万岁!:)

n3on