1

pyparsing を使用して、より大きなセットから必要なデータだけを処理する例を教えてもらえますか? 解析アクションは「if」ステートメントを使用する正しい方法ですか?

Oreilly の Pyparsing に関するパンフレットに記載されている大学とゲームのスコアの表を考えてみましょう。フロリダ州立大学と他の大学のデータがあります。Florida、Florida State、および South Florida のすべてがテーブルのランダムな場所にあるとします。フロリダの学校の結果だけをどのように処理しますか?

ドキュメントの後半では、すべてのデータに対してループが使用されており、そこに if ステートメントを配置できますが、解析アクションをいつ使用するか理解していない可能性があります。

4

1 に答える 1

0

解析アクションを使用して、定義された解析ルールに一致したデータにさらに検証を追加できますが、一部のセマンティック ルールに失敗する可能性があります。以下は、任意の整数に一致する式で解析アクションが使用されているが、解析アクションでは偶数の整数しか許可されていない場合です。

from pyparsing import *

integer = Word(nums).setParseAction(lambda t:int(t[0]))

even_integer = integer.copy()
def onlyEvensAllowed(tokens):
    if tokens[0] % 2 != 0:
        # reject this integer by raising a ParseException
        raise ParseException('only even numbers allowed')
even_integer.addParseAction(onlyEvensAllowed)


sample = "92873 234 2934 2934 292394 239847 293879237 2398 293492"

number = even_integer | integer.suppress()
print OneOrMore(number).parseString(sample)

版画:

[234, 2934, 2934, 292394, 2398, 293492]

大学の試合のスコアの場合、同様のフィルタリング解析アクションを実行して、"Florida" という文字列を含む大学名のみを受け入れ、そうでない場合は ParseException を発生させることができます。

于 2013-02-02T06:04:00.533 に答える