2017-12-18 34 views
0

さまざまな日付形式を取得する正規表現を作成しようとしています。Pythonのさまざまな日付形式の正規表現

文章はシリーズになっていて、シリーズの各サンプルには1つの日付しか含まれていませんが、他の数字も含まれています。

日付の書式はこのようなものです:

:のみ、それは20世紀の年であり、我々が想定し2桁を持っている年(すなわち19nn)

ここに私の正規表現があるために

04/20/2009; 04/20/09; 4/20/09; 4/3/09 
Mar-20-2009; Mar 20, 2009; March 20, 2009; Mar. 20, 2009; Mar 20 2009; 
20 Mar 2009; 20 March 2009; 20 Mar. 2009; 20 March, 2009 
Mar 20th, 2009; Mar 21st, 2009; Mar 22nd, 2009 
Feb 2009; Sep 2009; Oct 2010 
6/2008; 12/2009 
2009; 2010 

df_dates = df.str.extract(r'((?:\d{1,2})?[-/\s,]{0,2}(?:\d{1,2})?(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec|January|February|March|April|May|June|July|August|September|October|November|December)?[-/\s,]{0,2}(?:19|20)?\d{2})') 

私の正規表現は、これらの結果を生成します。

INPUT1

Lab: B12 969 2007\n 

found1

12,969 

INPUT2

Contemplating jumping off building - 1973 - difficulty writing paper.\n 

found2

1973 

質問

どのように私は望ましい結果を得るために、私の正規表現を変更できますか?

+0

"1973"がマッチしてはならない理由はわかりません。最後の例は "2010"で、 "1973"と同じ形式です。 – Racso

+0

重複しているかどうかわかりません。これは正規表現に関する質問ですが、もう一方は正規表現に限定されません。あなたがリンクしている質問の答えはおそらくこの場合にも役立つと思います。 – Racso

答えて

0

私は強く、あなたが単一のものですべてをやろうとするのではなく、あなたのデータを処理するためにいくつかの正規表現を使うべきだと強く信じています。そうすれば、新しい日付形式を追加することは、読みにくい正規表現を編集して、それをもっと不明瞭にするよりも簡単な方法になるので、より柔軟なシステムを実現できます。

プログラミング言語で正規表現を使用しているとすれば、コードで正規表現を生成することができるため、文字列を複製しません。例として、この、迅速不完全と汚いスニペット考慮してください。最後に

import re 

monthsShort="Jan|Feb" 
monthsLong="January|February" 
months="(" + monthsShort + "|" + monthsLong + ")" 
separators = "[/-]" 
days = "\d{2}" 
years = "\d{4}" 

regex1 = months + separators + days 
regex2 = days + separators + months 

print(re.search(regex1,"Jan/01")) 

を、私は2つの日付形式を一致させるために使用できる正規表現のカップルを持っています。正規表現を完成させるのは簡単ではなく、より多くのフォーマットを追加するのは簡単です。すべてが読みやすくなります。もちろん、正規表現の部分を連結するとき(括弧のようなものを忘れるかもしれないので)注意する必要がありますが、それはあいまいな正規表現を扱うよりも簡単です。

編集:あなたの正規表現を生成した後、リストに追加するなどして、繰り返し実行して1つのループ内のテキストに適用することができます。あるいは、本当に必要な場合は、(括弧と垂直バーを使用して)すべての正規表現を生成して、単一の正規表現でそれらを適用することができます。

+0

ありがとうございました!私はあなたの方法でこれを解決しました! – Yanpei

+0

@Yanpei私はそれが助けてうれしいです。その答えを「ベストアンサー」と記入してください。 – Racso

関連する問題