从字符串中删除转义字符

Remove escape character from string

我想转这个字符串:

a = '\a'

进入这个

b = '\a'

使用 replace?

似乎没有明显的方法来做到这一点

更准确的说,我想把反斜杠的转义改成转义字符a

字符'\a'是ASCII BEL character, chr(7).

要在 Python 2 中进行转换:

from __future__ import print_function
a = '\a'
c = a.decode('string-escape')
print(repr(a), repr(c))

输出

'\a' '\x07'

为了将来参考,在 Python 3:

a = '\a'
b = bytes(a, encoding='ascii')
c = b.decode('unicode-escape')
print(repr(a), repr(c))

这给出了与上述代码段相同的输出。

在 Python 3 中,如果您正在使用字节对象,您将执行如下操作:

a = b'\a'
c = bytes(a.decode('unicode-escape'), 'ascii')
print(repr(a), repr(c))

输出

b'\a' b'\x07'

正如 Antti Haapala 所提到的,如果源字符串也包含 unicode 字符,Python 3 的这种简单策略将不起作用。在这种情况下,请参阅他的回答以获得更强大的解决方案。

Unescape string 是我搜索的结果:

>>> a = r'\a'
>>> a.encode().decode('unicode-escape')
'\x07'
>>> '\a'
'\x07'

这就是使用 unicode 的方法。由于您在 Python 2 中并且可能没有使用 unicode,您实际上可能是:

>>> a.decode('string-escape')
'\x07'

在 Python 2 你可以使用

>>> '\a'.decode('string_escape')
'\x07'

请注意 \a 是如何被表示为 \x07 的。

如果字符串是带有扩展字符的 unicode 字符串,您需要先将其解码为字节串,否则使用默认编码(ascii!)先将 unicode 对象转换为字节串。


然而,Python3 中不存在此编解码器,事情要复杂得多。您可以使用 unicode-escape 进行解码,但如果源字符串也包含 unicode 字符,它会非常损坏:

>>> '\aäầ'.encode().decode('unicode_escape')
'\x07äầ'

生成的字符串不包含 Unicode 字符,而是解码为 latin-1 的字节。解决方案是重新编码为 latin-1,然后再次解码为 utf8:

>>> '\aäầ\u1234'.encode().decode('unicode_escape').encode('latin1').decode()
'\x07äầሴ'