pyparsingコードをデバッグしようとしたときに、この予期しない動作に遭遇しました。
string1 = "this is a test string : that behaves as I expect\n"
string2 = "this string does not behave as I expect\n"
field = CharsNotIn(":\n")
line = field + ZeroOrMore(Literal(":") + field) + LineEnd()
print line.parseString(string1)
print line.parseString(string2)
これにより、次の出力が生成されます。
['this is a test string ', ':', ' that behaves as I expect', '\n']
['this string does not behave as I expect']
何らかの理由で、パーサーはで行末文字を取得string1
できますが、で取得できませんstring2
。string2
それが行末を拾わなかった場合、それがどのようにマッチを生み出すことができたのかさえ理解できません。
行末以外の文字を使用すると正常に機能するように見えるため、この動作は行末文字に特有のようです。
string1 = "this is a test string : that behaves as I expect*"
string2 = "this string also behaves as I expect*"
field = CharsNotIn(":*")
line = field + ZeroOrMore(Literal(":") + field) + Literal("*")
print line.parseString(string1)
print line.parseString(string2)
これにより、次のものが生成されます。
['this is a test string ', ':', ' that behaves as I expect', '*']
['this string also behaves as I expect', '*']