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']

Each句内のオプションのフィールドは正しく選択されているようですが(上部のリスト内に表示されています)、意図したとおりにラベル付けされていません。

をに変更すると、これは正常に機能EachAndます。

これは機能することを意味しますか?それとも私はここで何か間違ったことをしていますか?私はこの質問を見ました:pyparsing、Each、results nameですが、回答者が修正した問題が何であるかがわかりません。

4

1 に答える 1

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にバグがあることを示しています。少し見てみましたが、まだ見つかりませんでした。使い切ったら、新しいコメントを投稿します。

于 2012-05-01T12:18:10.290 に答える