2016-11-28 4 views
1

いくつかの記事から日付を抽出しようとしています。私が正規表現をテストするとき、パターンは目的の情報の一部にしか一致しません。あなたが見ることができるように: https://regex101.com/r/ATgIeZ/2正規表現|テキストからの日付の抽出

これは、テキストファイルのサンプルです:私は使用しています

|[<p>Advertisement , By MILAN SCHREUER and  ALISSA J. RUBIN OCT. 5, 2016 
, BRUSSELS — A man wounded two police officers with a knife in Brussels around...] 3004 
[<p>Advertisement , By DAVID JOLLY FEB. 8, 2016 
, KABUL, Afghanistan — A Taliban suicide bomber killed at least three people on Mo JULY 14, 2034 

抽出パターンとコードは、このいずれかになります。

import re 

text_open = open("News_cleaned_definitive.csv") 
text_read = text_open.read() 
pattern = ("[A-Z]+\.*\s(\d+)\,\s(\d+){4}") 
result = re.findall(pattern,text_read) 
print(result) 

そして、 Anacondaからの出力は次のとおりです。

[('5', '6'), ('7', '5'), ('1', '6'), .....] 

予想される出力は次のとおりです。

OCT. 5, 2016, FEB. 8, 2016, JULY 14, 2034 ..... 
+2

括弧内のグループは数字だけに一致します。期待される出力は何ですか(正規表現のあなたの正規表現は異なっています) –

答えて

1

問題は、あなたの最後のグループの外にあるリピートコマンド{4}です。また、月に捕捉するための正規表現は、グループ

内ではなかった。このようにそれを修正:あなたのデータサンプルと

pattern = r"([A-Z]+)\.?\s(\d+)\,\s(\d{4})" 

結果:

[('OCT', '5', '2016'), ('FEB', '8', '2016'), ('JULY', '14', '2034')] 

小余分な修正:

  • 0または1ドットを使用できます。だから、提案のため
+1

助けてくれてありがとう、私も月を抽出したいです(FEB。、7月など) –

+1

もちろんです!私が考えていたことは何でしょう?編集済み –

1

感謝を(ここでは何の問題も、しかし、例えば\bで発生することができます)正規表現文字列を定義していないときは、常により良い、それは使用を理解するのに役立った、\.?「生」の接頭辞を使用

  • ため\.*を削除正規表現のカッコの 私はこれで自分自身を解決しました:

    pattern=("([A-Z]+\.*\s)(\d+)\,\s(\d{4})") 
    
  • 関連する問題