2017-02-18 37 views
1

我是PyParser的新手,但如果能夠使其工作,我非常樂意使用它。如何使用PyParsing匹配可選的關鍵字後綴?

我有消息字符串我想解析有一個命令動詞,多字對象的名稱,然後一個可選的後綴,一些例子:

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和其他一些東西嘗試,但還沒有得到遠,可有人請點我在正確的方向?

回答

1

好吧,我想我是用NotAny走錯了路,我曾嘗試:

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

但如果我把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

相關問題