我正在尝试使用PyParser解析一些文本。问题是我的名字可以包含空格。所以我的输入可能是这样的。首先,名单:

Joe
bob
Jimmy X
grjiaer-rreaijgr Y

然后,他们做的事情:
Joe A
bob B
Jimmy X C

当然,问题是他们做的一件事可能与名字的结尾相同:
Jimmy X X
grjiaer-rreaijgr Y Y

如何为操作行创建解析器?解析的输出应该是Joe A。解析的输出应该是[Joe, A],或Jimmy X C-[Jimmy X, C]。即,Jimmy X X对。
如果我天真地创建我的名称解析器,意思是类似于[Jimmy X, X],那么它将匹配整行,给出[name, action],然后是由于没有看到操作而导致的解析错误(因为名称解析器已经使用了它)。
注:很抱歉前面的措辞模棱两可,让这个问题看起来像是一个NLP问题。

最佳答案

玩得高兴:

from pyparsing import Regex, oneOf

THE_NAMES = \
"""Joe
bob
Jimmy X
grjiaer-rreaijgr Y
"""

THE_THINGS_THEY_DO = \
"""Joe A
bob B
Jimmy X C
Jimmy X X
grjiaer-rreaijgr Y Y
"""

ACTION = Regex('.*')
NAMES = THE_NAMES.splitlines()
print NAMES
GRAMMAR = oneOf(NAMES) + ACTION
for line in THE_THINGS_THEY_DO.splitlines():
    print GRAMMAR.parseString(line)

07-27 14:58