【问题标题】:Python raw literal stringPython 原始文字字符串
【发布时间】:2011-03-31 20:59:58
【问题描述】:
str = r'c:\path\to\folder\'   # my comment
  • IDE:Eclipse
  • Python2.6

当字符串中的最后一个字符是反斜杠时,它似乎会转义最后一个单引号并将我的注释视为字符串的一部分。但是原始字符串应该忽略所有转义字符,对吗?有什么问题?谢谢。

【问题讨论】:

    标签: python string rawstring


    【解决方案1】:

    当紧随其后的字符是分隔文字的引号字符时,原始字符串文字不会将反斜杠视为启动转义序列except,在这种情况下,反斜杠会 逃避它。

    设计动机是,原始字符串文字的存在实际上只是为了方便输入正则表达式模式——也就是说,没有此类文字存在其他设计目标。并且 RE 模式永远不需要以反斜杠结尾,但它们可能需要包含各种引号字符,这就是规则。

    许多人确实尝试使用原始字符串文字来使他们能够以他们习惯的方式(使用反斜杠)输入 Windows 路径 - 但正如您所注意到的,当您确实需要一个以结尾的路径时,这种用法会失效一个反斜杠。通常,最简单的解决方案是使用 forward 斜杠,Microsoft 的 C 运行时和所有版本的 Python 都支持在路径中完全等效:

    s = 'c:/path/to/folder/'
    

    (旁注:不要使用您自己的标识符隐藏内置名称,例如str - 这是一种可怕的做法,没有任何好处,除非您养成避免这种情况的习惯可怕的做法有一天你会发现自己遇到了一个令人讨厌的调试问题,当你的代码的某些部分践踏了内置名称而另一部分需要使用真正含义的内置名称) .

    【讨论】:

    • 用法略有不同,但问题相似:一个 b64encode() 字节对象如何在末尾带有文字反斜杠?如果我尝试 b'somestring\' 我得到一个错误,如果我 b'somestring\\' 它编码两个反斜杠。
    【解决方案2】:

    恕我直言,这是 Python 中的一个不一致之处,但它在文档中有所描述。转到倒数第二段:

    http://docs.python.org/reference/lexical_analysis.html#string-literals

    r"\" 不是有效的字符串文字 (即使是原始字符串也不能以 奇数个反斜杠)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-12
      • 1970-01-01
      • 2020-02-06
      • 2017-10-22
      • 2021-01-06
      • 2023-03-11
      相关资源
      最近更新 更多