Python将\替换为\ \

kan*_*and 31 python string double replace slash

所以我似乎无法弄清楚这一点......我有一个字符串说,"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'
Run Code Online (Sandbox Code Playgroud)

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

>>> a.replace("\\","%")
'a%nb'
Run Code Online (Sandbox Code Playgroud)

这里有什么我想念的吗?

编辑我明白\是一个转义字符.我在这里要做的是将所有\\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'
Run Code Online (Sandbox Code Playgroud)

我希望字符串a看起来像字符串b.但是替换不是像我想的那样替换斜线.

Joc*_*zel 40

没有必要使用替换.

你有一个编码字符串(使用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'
Run Code Online (Sandbox Code Playgroud)

在Python 3中:

>>> import codecs
>>> codecs.decode('\\n\\x21', 'unicode_escape')
'\n!'
Run Code Online (Sandbox Code Playgroud)

  • 我认为Python 3的相当于:`bytes(s,'utf-8').decode("unicode_escape")` (4认同)
  • 或者在 Python 3 中:`'a\\nb'.encode().decode('unicode_escape')` (3认同)

sle*_*erd 8

你错过了,那就是逃脱角色.

请看这里:http ://docs.python.org/reference/lexical_analysis.html 2.4.1"Escape Sequence"

最重要的是\n是换行符.并且\\是一个逃脱的逃脱角色:D

>>> a = 'a\\\\nb'
>>> a
'a\\\\nb'
>>> print a
a\\nb
>>> a.replace('\\\\', '\\')
'a\\nb'
>>> print a.replace('\\\\', '\\')
a\nb
Run Code Online (Sandbox Code Playgroud)