我想把这个字符串:
a = '\\a'
Run Code Online (Sandbox Code Playgroud)
进入这个
b = '\a'
Run Code Online (Sandbox Code Playgroud)
似乎有一种明显的方法可以做到这一点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))
Run Code Online (Sandbox Code Playgroud)
产量
'\\a' '\x07'
Run Code Online (Sandbox Code Playgroud)
在Python 3中供将来参考:
a = '\\a'
b = bytes(a, encoding='ascii')
c = b.decode('unicode-escape')
print(repr(a), repr(c))
Run Code Online (Sandbox Code Playgroud)
这为上面的代码片段提供了相同的输出.
在Python 3中,如果您使用的是字节对象,则可以执行以下操作:
a = b'\\a'
c = bytes(a.decode('unicode-escape'), 'ascii')
print(repr(a), repr(c))
Run Code Online (Sandbox Code Playgroud)
产量
b'\\a' b'\x07'
Run Code Online (Sandbox Code Playgroud)
正如Antti Haapala所提到的,如果源字符串也包含unicode字符,那么Python 3的这个简单策略将不起作用.在这种情况下,请查看他的答案,以获得更强大的解决方案.
在Python 2上你可以使用
>>> '\\a'.decode('string_escape')
'\x07'
Run Code Online (Sandbox Code Playgroud)
请注意如何\a重新编写\x07.
如果字符串是一个也带有扩展字符的unicode字符串,则需要先将其解码为bytestring,否则使用默认编码(ascii!)将unicode对象首先转换为bytestring.
但是,这个编解码器在Python 3中不存在,而且事情要复杂得多.您可以使用unicode-escape解码,但如果源字符串也包含unicode字符,它会非常破碎:
>>> '\aä?'.encode().decode('unicode_escape')
'\x07äầ'
Run Code Online (Sandbox Code Playgroud)
结果字符串不包含Unicode字符,但字节解码为latin-1.解决方案是重新编码为latin-1,然后再次解码为utf8:
>>> '\\aä?\u1234'.encode().decode('unicode_escape').encode('latin1').decode()
'\x07ä??'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5293 次 |
| 最近记录: |