在Python 3中将双反斜杠转换为单反斜杠

时间:2013-01-22 06:56:47

标签: python-3.x replace escaping backslash

我有一个像这样的字符串:

>>> t
'\\u0048\\u0065\\u006c\\u006c\\u006f\\u0020\\u20ac\\u0020\\u00b0'

我使用的函数将unicode转换为代表性的Python转义序列。然后,当我想将它转换回来时,我无法摆脱双反斜杠,因此它再次被解释为unicode。怎么办呢?

>>> t = unicode_encode("
>>> t
'\\u0048\\u0065\\u006c\\u006c\\u006f\\u0020\\u20ac\\u0020\\u00b0'
>>> print(t)
\u0048\u0065\u006c\u006c\u006f\u0020\u20ac\u0020\u00b0    
>>> t.replace('\\','X')
'Xu0048Xu0065Xu006cXu006cXu006fXu0020Xu20acXu0020Xu00b0'
>>> t.replace('\\', '\\')
'\\u0048\\u0065\\u006c\\u006c\\u006f\\u0020\\u20ac\\u0020\\u00b0'

当然,我不能这样做:

>>> t.replace('\\', '\')
  File "<ipython-input-155-b46c447d6c3d>", line 1
    t.replace('\\', '\')
                         ^
SyntaxError: EOL while scanning string literal

3 个答案:

答案 0 :(得分:7)

不确定这是否适合您的情况,但您可以尝试使用unicode_escape

>>> t
'\\u0048\\u0065\\u006c\\u006c\\u006f\\u0020\\u20ac\\u0020\\u00b0'
>>> type(t)
<class 'str'>
>>> enc_t = t.encode('utf_8')
>>> enc_t
b'\\u0048\\u0065\\u006c\\u006c\\u006f\\u0020\\u20ac\\u0020\\u00b0'
>>> type(enc_t)
<class 'bytes'>
>>> dec_t = enc_t.decode('unicode_escape')
>>> type(dec_t)
<class 'str'>
>>> dec_t
'Hello € °'

或缩写形式:

>>> t.encode('utf_8').decode('unicode_escape')
'Hello € °'

您接受字符串并使用UTF-8对其进行编码,然后使用unicode_escape对其进行解码。

答案 1 :(得分:0)

您的代码中只有一个反斜杠,但反斜杠表示为\\。如您所见,当您使用print()时,只有一个反斜杠。因此,如果你想摆脱两个反斜杠中的一个,不要做任何事情,它就不存在了。如果你想摆脱两者,只需删除一个。再次使用\\代表一个反斜杠:t.replace("\\", "")

所以你的字符串首先没有两个反斜杠,这应该不是问题。

答案 2 :(得分:0)

由于反斜杠是一个转义字符而你正在搜索两个反斜杠,你需要用两个替换四个反斜杠 - 即:

t.replace("\\\\", "\\")

这会将每个r"\\"替换为r"\"r表示原始字符串。因此,例如,如果您将print(r"\\")键入idle或任何python脚本(或Python 2中的print r"\\"),您将获得\\\\。这意味着每个"\\"实际上只是r"\"

user1632861建议您使用.replace("\\", ""),但这将取代r"\"。请尝试使用上面的方法。 :d

然而,在这种情况下,看起来好像是在阅读/接收数据,你可能想要使用正确的编码,然后解码为unicode(就像我上面提到的那样)。