2017-05-05 133 views
0

我已经在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)使用re替代unicode字符串

例如借此

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

我评价\\x..模式using this online regex tester选择语言蟒蛇also thisthis SO Question's answer使用基于参考\\\\x..模式,但两者给我[email protected]\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 

注:

我ve也试过

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

这个删除某些字符,但我仍然可以看到一些字符串像\x0c这是所以我只想正则表达式的方式来替换这些字符串。

尝试正则表达式:

abc="[email protected]\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。因为它会帮助我理解我的错误。问题可能很简单,但需要解决方案。我在这里张贴之前已经做了很多的研究及尝试,我希望人们“LL值它们

回答

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