我想转此字符串:
a = '\\a'
进入这个
b = '\a'
replace
编辑:更确切地说,我想更改反斜杠的转义以逃避字符a
答案 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'