私はPyparsingを使い慣れていません。私は何が間違っているのかを説明する最も単純な形式に問題を減らそうとしました。(おそらくPyparsingは必要ないでしょう)トークンを変更するnewbie setParseActionをパースします
文字と数字からなる文字列があるとします例えば、 "b7 z4 a2 de c3"とすることができる。常に手紙がありますが、番号は任意です。これを個々の要素に分解して処理したいのですが、番号のない裸の手紙がある場合は、それを変更して後に「デフォルト」番号1を付けると便利です。そして、すべての要素を一貫した方法で処理することができました。
from pyparsing import *
teststring = "a2 b5 c9 d e z"
expected_letter = Word("ABCDEFGabcdefgzZxy", exact=1)
expected_number = Word(nums)
letter_and_number = expected_letter + expected_number
bare_letter = expected_letter
bare_letter.setParseAction(lambda s,l,t: t.append("1"))
elements = letter_and_number | bare_letter
line = OneOrMore(elements)
print line.parseString(teststring)
は残念ながら、t.appendは()私は、「1」のリストに追加するあった、期待してい何をしていません。次のように私は、私がsetparseActionでこれを行うことができると思いました解析されたトークン。代わりに、私はエラーが発生します:TypeError: 'str'オブジェクトは呼び出し可能ではありません。
私はおそらく、ここでは本当に厚いですが、あなたの1人の専門家が私をまっすぐにしてください。
スティーブ
ああ、それは今完璧な意味があります!解析結果をプリントアウトすると、通常のリストのように見えたので、通常の方法で追加することができたと思いました。また、オプションでデフォルト設定が可能であるという事実を忘れていました。そして、私の実際のプログラムにも適用されます。これは、ここでは取り除かれたバージョンより少し複雑です。あなたの助け...とPyparsing自体のために多くのおかげで!スティーブ –