我已经在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选择语言为python also this,并根据this SO Question's answer的引用使用\\\\x..
模式,但两者都给了我CTIinfo@thecoaches.com\n\x0c
作为输出。它不会删除那些unicode字符串。我不想使用模式\\\w..
,因为它可能会选择转义序列。甚至我尝试了抛出UnicodeDecodeError
的abc.encode('utf8')。我理解问题是因为\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
表单提要 ,所以我只想用正则表达式来替换这些字符串。< / p>
尝试正则表达式:
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)
请添加downvoting的原因。因为它会帮助我理解我的错误。问题可能很简单,但需要解决方案。在发布之前我做了很多研究和实验,我希望人们会重视它们
答案 0 :(得分:0)
找到修复字符范围\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
答案 1 :(得分:-2)
请参阅此链接How does \v differ from \x0b or \x0c?
\ x不是分开的,这四个字符是一组。
应用re.sub(R&#34; \ X0C&#34;&#34;&#34;,ABC)