2016-04-14 2 views
0

私はpdfのリストを読み込んでリストを.csvファイルに変換するプロジェクトに取り組んでいますが、pdfを読むとそのテキストは文字列に渡されます私は何の問題もないが、私は例えば、日付、見つけたとき、私は入力に"\n"すべての時間を持っている:DATEを文字列で検索する方法

のような文字列で:

'HELDER ALVES DE OLIVEIRA18/06/1986RENAN ALVES DE OLIVEIRA06/08/2005' 

私が望んでいた方法:

'HELDER ALVES DE MEDEIROS;18/06/1986\NRENAN ALVES DE OLIVEIRA;06/08/2005\N' 

をだからファイル.csvを開くとb電子化された。

+0

正規表現を試してみてくださいhttps://docs.python.org/2/library/re.html – trans1st0r

答えて

3

あなたはregular expressionsでそれを行うことができます:Jules Mazurで前の回答にコメントで指摘したように

>>> import re 
>>> s = 'HELDER ALVES DE OLIVEIRA18/06/1986RENAN ALVES DE OLIVEIRA06/08/2005' 
>>> re.sub('(\d\d\/\d\d/\d\d\d\d)', '\\1\n',s) 
'HELDER ALVES DE OLIVEIRA18/06/1986\nRENAN ALVES DE OLIVEIRA06/08/2005\n' 
+0

入力にはエラーが含まれていないと予想されますが、 '56/36/2005'のような無効な日付と一致することに注意してください。 – Jules

+0

入力には常に仮定が必要です。名前に有効な日付が含まれている場合(例:HELDER ALVES 01/01/2001 DE OLIVEIRA)とにかくあなたは正しいです。場合によっては、これは期待どおりに機能しません。 – Francesco

0

私はあなたが設定する必要があること、あなたがより良い使用にreモジュールの力強さを置くべきだと思います無効な日付をフィルタリングのいくつかの並べ替えは、ここではその一例です:

>>> s 
'HELDER ALVES DE OLIVEIRA18/06/1986RENAN ALVES DE OLIVEIRA06/08/2005' 
>>> 
>>> re.findall(r'((?:[1-2][0-9]|0[1-9]|3[0-1])/(?:0[0-9]|1[0-2])/(?:[1-2][0-9][0-9][0-9]))', s) 
['18/06/1986', '06/08/2005'] 
>>> 
>>> re.sub(r'(?P<Date>(?:[1-2][0-9]|0[1-9]|3[0-1])/(?:0[0-9]|1[0-2])/(?:[1-2][0-9][0-9][0-9]))', '\g<Date>\n', s) 
'HELDER ALVES DE OLIVEIRA18/06/1986\nRENAN ALVES DE OLIVEIRA06/08/2005\n' 

あなたはこのregex demoでの詳細な説明を確認することができます。 さらに、reの日付と時刻のパターンは、正規表現ライブラリで見つけることができます

関連する問題