2017-02-18 11 views
1

私はPyParserを使い慣れていませんが、動作させるにはそれを使用したいと考えています。PyParsingを使用してオプションのキーワードサフィックスをどのように一致させることができますか?

私はメッセージIは、コマンド動詞、マルチワードオブジェクトの名前を入力し、[オプションの接尾辞を持つ解析したい文字列を、いくつかの例があります。

verb object 
verb another object 
verb object friday 
verb another object monday 

動詞は固定されたリストからのものを、サフィックス(この例では曜日)もそうですが、オブジェクト名は他の単語の組み合わせでもかまいません。

これはかなり基本的なことやこれまでのところ、私は持つべきものの一種として私を打つ:これは私もしたいどのように機能していない

#!/bin/env python 

from pyparsing import Word, alphas, Group, OneOrMore, oneOf, Optional 

Verb = Word(alphas) 
Object = Group(OneOrMore(Word(alphas))) 
Suffix = oneOf('Monday Tuesday Wednesday Thursday Friday Saturday Sunday', 
       caseless=True) 
Command = Verb + Object + Optional(Suffix) 

for msg in ["verb object", 
      "verb another object", 
      "verb object friday", 
      "verb another object monday"]: 
    print(Command.parseString(msg)) 

サフィックスがどこにあるか、私は次の出力を取得しています

['verb', ['object']] 
['verb', ['another', 'object']] 
['verb', ['object', 'friday']] 
['verb', ['another', 'object', 'monday']] 

私が誰かが正しい方向に私をポイントしてくださいすることができ、NotAnyといくつか他のものを使用してみましたが、これまで持っていない:オブジェクトのグループに含まれていますか?

Object = Group(OneOrMore(Word(alphas) + NotAny(Suffix))) 

をしかし、私は言葉の前にNotAnyを置けば、それは動作します:[OK]を

答えて

1

が、私は間違った方法NotAny使用していたと思いますが、私が試した

Object = Group(OneOrMore(NotAny(Suffix) + Word(alphas))) 

出力は次のようになります。

['verb', ['object']] 
['verb', ['another', 'object']] 
['verb', ['object'], 'Friday'] 
['verb', ['another', 'object'], 'Monday'] 

かなり簡単ですが、より良い方法があれば、私は提案があります。

+1

これはかなり可能ですが、OneOrMore(Word(alphas)、stopOn = Suffix)でも可能です。 stopOn引数は、あなたのために否定的な先読みを行います。しかし、彼らは事実上同じです。 – PaulMcG

+0

ありがとう@PaulMcGuire、私は指導に感謝:) – Tom

関連する問題