我正在尝试使用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)