2012-04-26 6 views
5

における人間形式の日付の範囲は、私は、文字列では、一部の人間スタイルの日付の範囲を持っている:パース、以下のようなPythonの

22-24th April 2012 
14-23 July 
20th June - 5th July 

私は、2つの日時で終わることができるようにPythonでこれらを解析しますオブジェクト:開始のためのもの、終了のためのもの。

私にこれをさせるモジュールはありますか?私はparsedatetimeを試しましたが、その中にevalRangeのような機能がありますが(ドキュメントはhttp://code-bear.com/code/parsedatetime/docs/index.htmlを参照)、何も解析していないようで、現在の日付/時刻を2回返します。

アイデア?

+1

ロビン、 私見 - これらの文字列正規表現の、カスタム・ロジックの様々なは、あなたの最善の策です。 -dc – dc5553

答えて

7

私は今、オープンソース持っている、これを行うにはPythonモジュールを書くことになりました。それはGithubでダウンロードでき、documentationがあり、それは使用しては、PyPIからインストールすることができます興味を持っている人のために

pip install daterangeparser 

を、モジュールがPyParsingを使用して完全なパーサを作成することによって動作し、偉大な(と著しく使いやすい)ツールです。前の回答に基づいて

+1

恐ろしい!ありがとう! –

2

dateutil.parserを使用できます。しかし、日付範囲は処理されません。前もって正規表現を適用する必要があるかもしれません。

import dateutil.parser 
dateutil.parser.parse("20th June") 

戻りdatetime.datetime(2012, 6, 20, 0, 0)

よろしく

0

、何を行う可能性はある:

  1. 前処理を行い、あなたの入力します(例えば:20th June5th July)開始と終了の日付を取得するようにします。あなたの最初の例では(date_range == 22-24th July 2012)あなたはdate_range.split(' ')[0].split('-')を使用していることを行うことができます。これは['22', '24th']を返します(ただthと同様のドロップ)
  2. dateutil.parserを使用してこれらの日付からdatetimeオブジェクトを取得します:dateutil.parser.parse('22 July 2012')

ここでの実装です以前に何を言われた:

import dateutil.parser 
date_range = '20-22th July 2013' 
date_range = date_range.lower() 
for suffix in {'th', 'rd', 'st'}: 
    date_range.replace(suffix, '') 
days = date_range.split(' ')[0].split('-') 
month_year = date_range.split(' ')[1] 
begin, end = days[0] + ' ' + month_year, days[1] + ' ' + month_year 
begin_date = dateutil.parser.parse(begin) 
end_date = dateutil.parser.parse(end) 
関連する問題