2017-05-05 12 views
0

ubuntuでpdftotext -raw /path/to/pdf.pdf /path/to/output.txtを使用してPDF文書をファイルに変換しました。私はsample = open("/path/to/output.txt").read()を使って変換したファイルを読んだ。サンプルには、デコードされていないユニコード文字列(\xe2\x80\x99など)があります。私は''と正規表現を使用してそれらを置き換えたいです。私はpythonのalso thisとして\\x..パターンusing this online regex tester選んだ言語を評価し、this SO Question's answerからの参照に基づいて\\\\x..パターンを使用しますが、両方が出力として私を[email protected]\n\x0c与え、このreを使用してユニコード文字列を置換する

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

を取るたとえばパターンにre.sub(r"""\\\\"""," ",sample),re.sub(r'\\x..',"",sample),re.sub(r'\\\\x..'," ",sample)

を使用しました。これらのユニコード文字列は削除されません。私はパターン\\\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="[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の理由を追加してください。私の間違いを理解するのに役立ちます。問題は単純かもしれませんが、解決策が必要です。私はそれをここに投稿する前に、非常に多くの研究と実験法を行ってきた、私は彼らが

答えて

0

\x00-\x7fの範囲ので、キーボードのすべての文字re.sub(r'[^\x00-\x7f]+','', abc)を含み、すべての文字を置き換え、結果は''

ないです\f\vのような印字可能な文字は、\x0c\x0bとして、Pythonインタプリタによって認識されます。他の印字不可能な文字はそのまま認識されます。例:\n\r\b\n\r\bと認識されます。したがって、交換するためにのみ\x0c\x0b正規表現はre.sub(r'[\x0b-\x0c]','',(re.sub(r'[^\x00-\x7f]+','', abc)))re.sub(r'[^\x00-\x7f]+','', abc).replace("\f","").replace("\v","")

正規表現が保存されている置き換え文字列やその他の非印字可能文字から\x0b,\x0c置き換え働くだろう他のエスケープシーケンスと文字をスキップするようにすることではなく、\f\vをしています。これはまたstr.replace()\f and \v

これらの2つの文字だけが他の2つのエスケープシーケンスの機能性を併せ持つので、これら2つの文字はPythonで認識が異なります。

例:

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

\ X分離されていない、これらの4つの文字が一つのグループがあり、このリンクHow does \v differ from \x0b or \x0c?

を参照してください人っ値を願っています。

re.sub(R "の\ x0c"、 ""、ABC)の文字を修正見つかり

関連する問題