【问题标题】:Python Replace \\ with \Python 将 \\ 替换为 \
【发布时间】:2011-07-08 09:28:07
【问题描述】:

所以我似乎无法弄清楚...我有一个字符串说,"a\\nb",我希望它变成"a\nb"。我已经尝试了以下所有方法,但似乎都不起作用;

>>> a
'a\\nb'
>>> a.replace("\\","\")
  File "<stdin>", line 1
    a.replace("\\","\")
                      ^
SyntaxError: EOL while scanning string literal
>>> a.replace("\\",r"\")
  File "<stdin>", line 1
    a.replace("\\",r"\")
                       ^
SyntaxError: EOL while scanning string literal
>>> a.replace("\\",r"\\")
'a\\\\nb'
>>> a.replace("\\","\\")
'a\\nb'

我真的不明白为什么最后一个有效,因为这很好:

>>> a.replace("\\","%")
'a%nb'

这里有什么我遗漏的吗?

编辑 我知道 \ 是一个转义字符。我在这里尝试做的是将所有\\n \\t 等转换为\n \t 等,并且替换似乎不像我想象的那样工作。

>>> a = "a\\nb"
>>> b = "a\nb"
>>> print a
a\nb
>>> print b
a
b
>>> a.replace("\\","\\")
'a\\nb'
>>> a.replace("\\\\","\\")
'a\\nb'

我希望字符串 a 看起来像字符串 b。但是替换并没有像我想象的那样替换斜杠。

【问题讨论】:

  • 您的原始字符串 a = 'a\\nb' 实际上并没有两个 '\' 字符,第一个是后者的转义符。如果你这样做了,print a,你会发现你实际上只有一个 '\' 字符。

标签: python string replace double slash


【解决方案1】:

在 Python 3 中它将是:

bytes(s, 'utf-8').decode("unicode_escape")

【讨论】:

    【解决方案2】:
    path = "C:\\Users\\Programming\\Downloads"
    # Replace \\ with a \ along with any random key multiple times
    path.replace('\\', '\pppyyyttthhhooonnn')
    # Now replace pppyyyttthhhooonnn with a blank string
    path.replace("pppyyyttthhhooonnn", "")
    
    print(path)
    

    #输出... C:\Users\Programming\Downloads

    【讨论】:

      【解决方案3】:

      没有必要为此使用替换。

      您拥有的是一个编码字符串(使用string_escape 编码)并且您想要对其进行解码:

      >>> s = r"Escaped\nNewline"
      >>> print s
      Escaped\nNewline
      >>> s.decode('string_escape')
      'Escaped\nNewline'
      >>> print s.decode('string_escape')
      Escaped
      Newline
      >>> "a\\nb".decode('string_escape')
      'a\nb'
      

      在 Python 3 中:

      >>> import codecs
      >>> codecs.decode('\\n\\x21', 'unicode_escape')
      '\n!'
      

      【讨论】:

      • 我认为 Python 3 的等价物是:bytes(s, 'utf-8').decode("unicode_escape")
      • 或者在 Python 3 中:'a\\nb'.encode().decode('unicode_escape')
      • @JonathanHartley 您应该将此作为单独的答案提交。
      • 不,你应该!
      • 这不会在所有情况下删除双斜杠,例如 \\N 将失败。 print(codecs.decode('\\N\\x21', 'unicode_escape')) w/error message "malformed \N character escape."
      【解决方案4】:

      您的原始字符串 a = 'a\\nb' 实际上没有两个 '\' 字符,第一个是后者的转义符。如果你这样做了,print a,你会发现你实际上只有一个 '\' 字符。

      >>> a = 'a\\nb'
      >>> print a
      a\nb
      

      但是,如果您的意思是将'\n' 解释为换行符,而不转义斜杠,那么:

      >>> b = a.replace('\\n', '\n')
      >>> b
      'a\nb'
      >>> print b
      a
      b
      

      【讨论】:

      • 这工作谢谢!部分问题是我认为 \\n 是 3 个字符而不是 2 个字符,这让我感到困惑。
      【解决方案5】:
      r'a\\nb'.replace('\\\\', '\\')
      

      'a\nb'.replace('\n', '\\n')
      

      【讨论】:

        【解决方案6】:

        在 Python 字符串文字中,反斜杠是转义字符。当交互式提示向您显示字符串的值时也是如此。它将为您提供字符串的文字代码表示。使用print 语句查看字符串的实际外观。

        这个例子显示了区别:

        >>> '\\'
        '\\'
        >>> print '\\'
        \
        

        【讨论】:

          【解决方案7】:

          你错过了,那个 \ 是转义字符。

          看这里:http://docs.python.org/reference/lexical_analysis.html 在2.4.1“逃生序列”

          最重要的是 \n 是换行符。 并且 \\ 是一个转义的转义字符:D

          >>> a = 'a\\\\nb'
          >>> a
          'a\\\\nb'
          >>> print a
          a\\nb
          >>> a.replace('\\\\', '\\')
          'a\\nb'
          >>> print a.replace('\\\\', '\\')
          a\nb
          

          【讨论】:

            【解决方案8】:

            这是因为,即使在“原始”字符串(=在起始引号前带有 r 的字符串)中,未转义的转义字符也不能是字符串中的最后一个字符。这应该可以代替:

            '\\ '[0]
            

            【讨论】:

              猜你喜欢
              • 2016-05-01
              • 1970-01-01
              • 2013-12-31
              • 2020-07-18
              • 1970-01-01
              • 2023-03-05
              • 2019-02-25
              • 2021-05-15
              相关资源
              最近更新 更多