以下は「パス」を出力します。
pattern = Word(alphanums) + StringEnd()
str=" bar "
results = pattern.parseString(str)
if 1 == len(results) && "bar" == results[0] :
print("pass")
else:
print("fail")
parseImpl
しかし、これはofで例外をスローしますclass StringEnd
(「bar」の「r」に続く文字が文字列の終わりではない場合):
pattern = Word(alphanums) + StringEnd()
str=" bar foo "
results = pattern.parseString(str) # <-- exception raised
これと同じように:
pattern = Word(alphanums)
str = " bar foo"
results = pattern.parseString(str,parseAll=True)
明らかにグラマーを満たさないため、2番目/3番目の parseString 呼び出しは空の配列を返すだけだと思います。
誰かが理由を理解するのを手伝ってくれますか?
(明らかなはずですが、実行するには「from pyparsing import *」が必要です。また、私はpython3.2とpyparsing 1.5.6を使用しています)