je suis tombé sur ce comportement inattendu tout en essayant de déboguer le code de pyparsing:comportement pyparsing inattendu
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)
Ceci produit la sortie suivante:
['this is a test string ', ':', ' that behaves as I expect', '\n']
['this string does not behave as I expect']
Pour une raison quelconque l'analyseur est en mesure de prendre le caractère de fin de ligne dans string1
, mais il est incapable de le ramasser dans string2
. Je ne peux même pas comprendre comment il était capable de produire un match pour string2
s'il n'a pas ramassé la fin de la ligne.
Ce comportement semble particulier à la fin de caractères de ligne en utilisant un caractère autre que la fin de la ligne semble fonctionner très bien:
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)
Ce produit:
['this is a test string ', ':', ' that behaves as I expect', '*']
['this string also behaves as I expect', '*']