を発生することは、これらのお気に入り:問題は、しかし、その部分 キーワードが起こる式の文法と最後の時間を一致させるためにどのように私は、文字列にマッチする式の文法を書きたい
words at the start ONE|ANOTHER wordAtTheEnd ---------^-------- ----^----- --^-- A: alphas B: choice C: alphas
ある
を含めることができます Bのキーワード "ONE"または "ANOTHER"のいずれかであるため、 の最後のの選択キーワードの出現は、 Bと一致する必要があります。ここでは例:choice = pp.Or([pp.Keyword("ONE"), pp.Keyword("OTHER")])('B')
start = pp.OneOrMore(pp.Word(pp.alphas), stopOn=choice)('A')
end = pp.Word(pp.alphas)('C')
expr = (start + choice) + end
しかし、この:文字列
ZERO ONE or TWO are numbers ANOTHER letsendhere
は私がOneorMore
表現するための "stopOn
" -keywordを試してみましたpyparsing
で
A: "ZERO ONE or TWO are numbers"
B: "ANOTHER"
C: "letsendhere"
フィールドに解析する必要があります動作しません。サンプル文字列のために私はParseException
を得る:stopOn
はchoice
の最初発生しませ最後発生時に停止するため
Expected end of text (at char 12), (line:1, col:13)
"ZERO ONE or >!<TWO are numbers ANOTHER text"
これは、理にかなっています。代わりに、最後に発生した文法をどうやって書くことができますか?多分私はcontext-sensitive grammarに頼る必要がありますか?
問題pyparsingを使用すると、このようなヘルパーメソッドを書くことができ: "pp.Or(pp.Keyword(" ONE ")、pp.Keyword(" OTHER "))' - キーワード( "OTHER")は "ANOTHER"の "OTHER"と一致しません。式ではなく、2式である。 – PaulMcG
はい、もちろんです!私はサンプルを生成したばかりです。質問で修正されました。ありがとう。 – halloleo