python中的原始转义除了最后一个char

时间:2009-11-19 15:52:30

标签: python

为什么在python中我不能使用:

r"c:\"

6 个答案:

答案 0 :(得分:3)

当字符串必须包含与其开始的相同引号字符时,转义该字符是唯一可用的解决方法 - 因此设计备选方案是使原始字符串文字无法包含其引号字符,或保留“backlash escapes”约定,即使在字符串文字中,也仅用于引号字符。

由于原始字符串文字被设计用于正则表达式模式的方便表示(不适用于DOS / Windows路径! - ),并且在RE模式中,从不需要尾随反斜杠,因此设计决策很容易(基于实际使用)原始字符串文字的大小写。)

答案 1 :(得分:1)

使用"c:/""c:\\"。原始字符串文字用于转义转义序列,不包括文字反斜杠,但它们确实以这种方式工作,除非在这种情况下。

答案 2 :(得分:1)

我认为这是一个已知的案例,在这种情况下最好使用“c:\\”。

答案 3 :(得分:1)

来自documentation

  

...原始字符串不能以单个反斜杠结尾(因为反斜杠会转义以下引号字符)。

答案 4 :(得分:0)

即使使用原始字符串,\"也会导致"不被解释为字符串的结尾(尽管反斜杠会进入您的字符串),因此r"foo\"bar"将是合法的串。这在编写正则表达式时非常方便,但对写入路径不是很好。

这不是什么大问题,因为大多数时候你应该使用os.path和其他模块来处理你的路径。

答案 5 :(得分:0)

在设计和历史常见问题http://docs.python.org/faq/design.html#why-can-t-raw-strings-r-strings-end-with-a-backslash

中找到
  

原始字符串旨在简化   为处理器创建输入(主要是   想要的正则表达式引擎)   做自己的反斜杠逃脱   处理。这类处理器考虑   一个无与伦比的尾随反斜杠   无论如何都是错误,所以原始字符串   不允许这样做。作为回报,他们允许   你传递字符串引用   通过逃避它的角色   反斜杠。这些规则适用于   r字符串用于它们的预期   目的