setResultsName只显示第一个列表项

问题描述:

考虑下面的小例子:我怎样才能pyparsing分配整个列表,[ 'ookf', '大木'setResultsName只显示第一个列表项

from pyparsing import Word, delimitedList 
the_list = delimitedList(Word("fine").setResultsName("extension", listAllMatches=True)) 
prefixed = Word("okay").setResultsName("base") + the_list 
prefixed.addParseAction(lambda x: map(lambda element: x.base + element, x.extension)) 
final = prefixed.setResultsName("doesNotWork", listAllMatches=True) + Word("x") 

final.parseString("ookf,i,n,ex") 

回报

(['ookf', 'ooki', 'ookn', 'ooke', 'x'], {'doesNotWork': [((['ookf'], {}), 0)]}) 

, 'ookn','ooke','x'],去做NotNot,而不仅仅是第一个列表项目?

如果你改变prefixed到:

prefixed = Group(Word("okay").setResultsName("base") + the_list) 

请问这个是可以接受的?

+0

感谢pyparsing和您的答复。不幸的是,我有问题让我的parseAction使用您的建议。当我尝试prefixed.parseString。(“okf,i,n,e”)时,我会得到一个空字符串,而不是“ok” – Inkane 2012-04-30 06:17:00

+1

该组添加了另一层嵌套结果 - 尝试'前缀.parseString( '...')[0] .base'。 – PaulMcG 2012-04-30 13:01:40