使用替换unicode字符串

2024-04-28 07:22:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我用ubuntu中的pdftotext -raw /path/to/pdf.pdf /path/to/output.txt将一个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="CTIinfo@thecoaches.com\n\x0c"
re.sub(r'\\x..',"",abc)
re.sub(r'\\\\x..'," ",abc)
abc.encode("ascii","ignore")

我评估了\\x..模式using this online regex tester,选择了pythonalso this语言,并基于来自{a3}的引用使用了\\\\x..模式,但两者都给了我CTIinfo@thecoaches.com\n\x0c作为输出。它不会删除那些unicode字符串。我不想使用模式\\\w..,因为它可能会选择转义序列。我也试过了abc编码('utf8'),它抛出UnicodeDecodeError。我理解这个问题是因为\x??被读为字符串,但我不知道如何解决这个问题。在

如果要对解决方案运行测试,请使用以下工具:

^{pr2}$

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

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

注意:

我也试过了

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

这删除了一些字符,但是我仍然可以看到一些字符串,比如\x0c,它是表单提要,所以我只想用regex的方式来替换这些字符串。在

尝试使用正则表达式:

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)

请添加否决的理由。因为它能帮助我理解我的错误。问题可能很简单,但需要解决。我已经做了这么多的研究和实验,在这里发表,我希望人们会重视他们


Tags: 文件tosamplepath字符串retxtcom
2条回答

请查看此链接How does \v differ from \x0b or \x0c?

\x不是分开的,这四个字符是一组。在

在re.sub公司(r“\x0c”,“”,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)))或{}也可以

regex将从被替换的字符串中替换\x0b,\x0c,其他不可打印的字符将被保留。这也是由\f and \vstr.replace()完成的

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

示例:

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

相关问题 更多 >