如何使用PyParsing匹配可选的关键字后缀?

时间:2017-02-18 10:19:53

标签: python-3.x pyparsing

我是PyParser的新手,但如果能让它发挥作用,我很乐意使用它。

我有消息字符串我想解析它有一个命令动词,一个多字对象名,然后是一个可选的后缀,例如:

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 个答案:

答案 0 :(得分:1)

好吧,我认为我错误地使用了NotAny,我曾尝试过:

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

但是如果我把NotAny放在Word之前就可以了:

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

输出是:

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

看起来非常简单,但如果有更好的方法,我可以接受建议。