2012-04-29 29 views
0

は、以下の最低限の例で考えてみましょ示していますどのように私は、全体のリスト、[ 'ookf'、 '大木' を割り当てることpyparsing得ることができます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']、doesNotWork、そして最初のリスト項目だけでなく?あなたがprefixedを変更した場合

答えて

2

何を:

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

これは許容できるだろうか?

+0

あなたのお返事ありがとうございます。残念ながら、あなたの提案に私のparseActionが作用するのに問題があります。私はprefixed.parseString( "okf、i、n、e")baseを試してみると、 "ok"ではなく空の文字列を得るでしょう。 – Inkane

+1

グループは結果のネストの別のレイヤーを追加します。 .parseString( '...')[0] .base'。 – PaulMcG