当前位置: 首页 > 知识库问答 >
问题:

从字符串中删除转义字符

东方华晖
2023-03-14

我想转动这根绳子:

a = '\\a'

到这个里面

b = '\a'

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

更准确地说,我想将反斜杠的转义改为转义字符a

共有3个答案

岳安福
2023-03-14

我搜索了Unescape字符串,找到了这个:

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

这就是使用unicode的方法。由于您使用的是Python 2,并且可能没有使用unicode,因此您可能会使用:

>>> a.decode('string-escape')
'\x07'
解河
2023-03-14

在Python 2上,您可以使用

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

请注意\a如何表示为\x07

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

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

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

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

>>> '\\aäầ\u1234'.encode().decode('unicode_escape').encode('latin1').decode()
'\x07äầሴ'
乐正涵忍
2023-03-14

字符 “\a” 是 ASCII 贝尔字符 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中,如果您正在处理bytes对象,您应该这样做:

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

输出

b'\\a' b'\x07'

正如Antti Haapala提到的,如果源字符串也包含unicode字符,Python 3的这个简单策略就不起作用了。在这种情况下,请查看他的答案,寻找更可靠的解决方案。

 类似资料:
  • 问题内容: 我使用的框架会不时返回格式错误的字符串,其中包含“空”字符。 例如,“ foobar”表示为:[,f,o,o,b,a,r] 第一个字符不是空格(’‘),因此System.out.printlin()将返回“ foobar”而不是“ foobar”。但是,String的长度是7,而不是6。显然,这使大多数String方法(等于,拆分,子字符串等)变得无用。有没有办法从字符串中删除空字符?

  • 问题内容: 我得到的任务是从文本文件或字符串中删除所有非数字字符,包括空格,然后在旧字符旁边打印新结果,例如: 之前: 后: 由于我是初学者,所以我不知道从哪里开始。请帮忙 问题答案: 最简单的方法是使用正则表达式

  • 问题内容: 我正在考虑使用删除字符串中的某些字符。目前尚不清楚将要删除哪些字符(即我想删除哪些字符),但是我会假定任何字符都是有效的(例如和之类的东西,等等)。 我遇到了http://www.java-tips.org/java-se-tips/java.lang/strip-certain-characters- from-a-string.html, 但是肯定有比遍历每个字符更好的方法… 有什

  • 问题内容: 我在从字符串中删除非utf8字符时出现问题,这些字符无法正确显示。像这样的字符0x97 0x61 0x6C 0x6F(十六进制表示) 删除它们的最佳方法是什么?正则表达式还是其他? 问题答案: 使用正则表达式方法: 它搜索UTF-8序列,并将其捕获到组1中。它还与无法标识为UTF-8序列的一部分的单个字节匹配,但不捕获这些字节。替换是捕获到组1中的任何内容。这将有效删除所有无效字节。

  • 问题内容: 从网站提取数据时出现奇怪的字符: 如何删除不是非扩展ASCII字符的内容? 问题答案: 正则表达式替换将是最佳选择。使用作为一个例子的字符串,并使用匹配它,这是一个POSIX字符类: 什么是寻找所有可打印字符。相反,查找所有不可打印的字符。不属于当前字符集的所有字符都将被删除。 注意: 使用此方法之前,必须确保当前字符集为ASCII。POSIX字符类同时支持ASCII和Unicode,