私はPyparsingに不慣れです(そしてPythonにはかなり不慣れです)。私は自分の問題を、何がうまくいかないのかを説明する最も単純な形にまで減らしようとしました(おそらく、Pyparsingはまったく必要ないでしょう!)
「b7z4a2de c3」のように、文字と数字で構成される文字列があるとします。常に文字がありますが、数字はオプションです。これを個々の要素に解析して処理したいのですが、数字のない裸の文字がある場合は、その後に「デフォルト」の数字が1になるように変更すると便利です。そうすれば、すべての要素を一貫した方法で処理できます。次のように、setparseActionを使用してこれを実行できると思いました。
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」を追加するという、私が期待していることを実行しません。代わりに、次のエラーが発生します。TypeError:'str'オブジェクトを呼び出すことはできません。
私はおそらくここで本当に太っているだけですが、あなたの専門家の一人が私をまっすぐにしてください。
ありがとう
スティーブ