从字符串中删除转义字符

时间:2016-11-06 18:28:22

标签: python python-2.x

我想转此字符串:

a = '\\a'

进入这个

b = '\a'

replace

似乎没有明显的方法可以做到这一点。

编辑:更确切地说,我想更改反斜杠的转义以逃避字符a

3 个答案:

答案 0 :(得分:6)

字符'\ 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的这个简单策略将不起作用。在这种情况下,请查看他的答案以获得更强大的解决方案。

答案 1 :(得分:5)

在Python 2上,您可以使用

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

请注意\a如何重新定位\x07

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

然而,这个编解码器在Python 3中并不存在,而且事情要复杂得多。您可以使用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äầሴ'

答案 2 :(得分:1)

Unescape string是我搜索的内容:

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

这是用unicode做的方法。由于您使用的是Python 2并且可能没有使用unicode,因此实际上可能只有一个:

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