如何在python中删除转义序列,如'\ xe2'或'\ x0c'

vai*_*312 8 python regex escaping string-literals

我正在研究一个项目(基于内容的搜索),因为我在Ubuntu中使用'pdftotext'命令行实用程序,它将所有文本从pdf写入一些文本文件.但是它也写了子弹,现在当我正在读取文件来索引每个单词时,它也会得到一些索引的转义序列(比如'\ x01').我知道它是因为子弹(•).

我只想要文本,所以有没有办法删除这个转义序列.我做过这样的事情

escape_char = re.compile('\+x[0123456789abcdef]*')
re.sub(escape_char, " ", string)
Run Code Online (Sandbox Code Playgroud)

但这不会删除转义序列

提前致谢.

nne*_*neo 8

问题是它\xXX只是控制角色的表示,而不是角色本身.因此,\x除非您正在处理repr字符串,否则您无法完全匹配.

您可以使用字符类删除不可打印的字符:

re.sub(r'[\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\xff]', '', text)
Run Code Online (Sandbox Code Playgroud)

例:

>>> re.sub(r'[\x00-\x1f\x7f-\xff]', '', ''.join(map(chr, range(256))))
' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~'
Run Code Online (Sandbox Code Playgroud)