2012-04-30 13 views
1

使用して、私は日付文字列を解析するために、次のコードでPyParsingを使用しています:標識化オプションと&

from pyparsing import * 

# Day details (day number, superscript and day name) 
daynum = Word(nums, max=2) 
superscript = oneOf("th rd st nd", caseless=True) 
day = oneOf("Mon Monday Tue Tues Tuesday Wed Weds Wednesday Thu Thur Thurs Thursday Fri Friday Sat Saturday Sun Sunday", caseless=True) 

full_day_string = Optional(day).suppress() & daynum + Optional(superscript).suppress() 

# Month names, with abbreviations 
month = oneOf("Jan January Feb February Mar March Apr April May Jun June Jul July Aug August Sep September Oct October Nov November Dec December", caseless=True) 

# Year 
year = Word(nums, exact=4) 

# Full string 
date = Each([full_day_string("day"), Optional(month)("month"), Optional(year)("year")]) 

私は、パーサーを実行し、得られた構造をダンプすると、私が手次

In [2]: r = date.parseString("23rd Jan 2012") 

In [3]: print r.dump() 
['23', 'Jan', '2012'] 
- day: ['23'] 

各句内のオプションフィールドには、(あなたが一番上にリストの内部を見ることができます)が正しくピックアップされているように見えるが、彼らがあることを意味しているように、彼らは標識されていません。

EachAndに変更しても問題ありません。

これは機能するのですか?あるいは私はここで何か間違っているのですか?私はこの質問を見ました:pyparsing, Each, results name、私は問題が解決したことを確認したように見えません。回避策として

答えて

4

、変更:

date = Each([full_day_string("day"), Optional(month)("month"), Optional(year)("year")]) 

date = Each([full_day_string("day"), Optional(month("month")), Optional(year("year"))]) 

へしかし、これは単なるバグがpyparsingにあります私に語りました。私はそれを少し見てきましたが、それはまだ見つかりませんでした。私はそれを実行するときに私は新しいコメントを投稿します。

+0

ありがとうポール - それは素晴らしいです。 (一度)それが私が間違っていたことではないことを知ってうれしいです! – robintw

関連する問題