使用 re 替换 unicode 字符串

我已经通过pdftotext -raw /path/to/pdf.pdf /path/to/output.txt在 ubuntu 中使用将 pdf 文档转换为文件我使用sample = open("/path/to/output.txt").read(). 现在示例具有未解码的 unicode 字符串,如\xe2\x80\x99. 我想用正则表达式替换它们''我使用了模式re.sub(r"""\\\\"""," ",sample),re.sub(r'\\x..',"",sample),re.sub(r'\\\\x..'," ",sample)

例如拿这个

abc="[email protected]\n\x0c"
re.sub(r'\\x..',"",abc)
re.sub(r'\\\\x..'," ",abc)
abc.encode("ascii","ignore")

我评估\\x..模式使用此在线正则表达式测试仪选择语言蟒蛇也该和使用的\\\\x..基础上,从参考模式这太问题的答案,但都让我[email protected]\n\x0c作为输出。它不会删除那些 unicode 字符串。我不想使用该模式,\\\w..因为它可能会选择转义序列。即使我尝试了 abc.encode('utf8') ,它会抛出UnicodeDecodeError. 我明白这个问题是因为\x??被读取为字符串,但我不知道如何解决这个问题。

如果您想对解决方案运行测试,请使用这些:

182\nWheel of Life, 24\xe2\x80\x9325, 135\xe2\x80\x93136
\n194\xe2\x80\x93195
CTI\xe2\x80\x99s\ntraining enables participants 
80\xe2\x80\x9383

这些测试字符串的预期输出应该是

182\nWheel of Life, 2425, 135136
\n194195
CTIs\ntraining enables participants 
8083

笔记:

我也试过

abc=abc.decode("utf-8")
abc=abc.encode("ascii","ignore")

这将删除部分文字,但我仍然能看到一些类似的字符串\x0c,所以我想只是正则表达式的方式来替换这些字符串。

试过正则表达式:

abc="CTIinfo@th\x0c\xc0ecoaches.com\n\x0c" #input

re.sub(r'[\\x[a-fA-F0-7]-\\x[a-fA-F0-7]]+',' ',abc)
re.sub(r'[^\x00-\x7F]+',' ',abc)
re.sub(r'\\x..',"",abc)
re.sub(r'\\\\x..'," ",abc)

请添加拒绝投票的原因。因为它会帮助我理解我的错误。问题可能很简单,但需要解决方案。我在发这里之前做了很多研究和实验,我希望人们会重视它们

找到了字符范围的修复,\x00-\x7f包括键盘中的所有字符,因此re.sub(r'[^\x00-\x7f]+','', abc)替换了每个字符,结果是''

不可打印的字符\f\v被python解释器识别\x0c\x0b为其他不可打印的字符被识别为例如:\n\r\b被识别为\n\r\b. 因此,为了仅替换\x0c\x0b哪些是\f\v要跳过其他转义序列和字符,正则表达式将是re.sub(r'[\x0b-\x0c]','',(re.sub(r'[^\x00-\x7f]+','', abc)))re.sub(r'[^\x00-\x7f]+','', abc).replace("\f","").replace("\v","")也可以工作

正则表达式\x0b,\x0c从替换的字符串中替换,并保留其他不可打印的字符。这也被做str.replace()\f and \v

只有这两个字符在 python 识别上不同,因为只有这些字符结合了其他两个转义序列的功能。

例子:

\f ==> \n+\r
\v ==> \n+\t

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章