我想将此字符串转换为:
a = '\\a'
转换成这个
b = '\a'
使用replace
似乎没有明显的方法可以完成这个操作?
更准确地说,我想将反斜杠的转义更改为转义字符a
。
我想将此字符串转换为:
a = '\\a'
转换成这个
b = '\a'
使用replace
似乎没有明显的方法可以完成这个操作?
更准确地说,我想将反斜杠的转义更改为转义字符a
。
字符'\a'是ASCII编码中的BEL字符,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的简单策略将无法奏效。在这种情况下,请参阅他的答案以获得更强大的解决方案。
>>> '\\a'.decode('string_escape')
'\x07'
\a
被表示为 \x07
。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äầሴ'
Unescape string是我搜索到的内容:
>>> a = r'\a'
>>> a.encode().decode('unicode-escape')
'\x07'
>>> '\a'
'\x07'
>>> a.decode('string-escape')
'\x07'
a
。为了避免这样的情况发生,你需要通过在它之前再放一个反斜杠来转义反斜杠的特殊含义。Python 打印出来的是\\a
,但实际上只有两个字符:反斜杠和a
。 - Maciej Golprint(a)
. - inspectorG4dget