J'écris un analyseur syntaxique pour un format de fichier, et avoir un exemple que j'ai réduit à ce qui suit:Pourquoi cette grammaire pypars ne respecte-t-elle pas les fins de ligne?
import pyparsing as pp
element = pp.OneOrMore(pp.Word(pp.alphas)) | pp.Literal("|")
line = pp.Group(pp.OneOrMore(element)) + pp.White("\n")
top_level = pp.OneOrMore(line)
f = """
sdf dfg sdfgsdfsd | dsfgsdfsd sd sddffds safd | dfgdfg sadf |
dsfg gdfg asdsad | gdfgdf dfgdfgdf sdf | dfgdfgdf |
"""
parse_result = top_level.parseString(f)
print(parse_result.dump())
Cela donne:
[['sdf', 'dfg', 'sdfgsdfsd', '|', 'dsfgsdfsd', 'sd', 'sddffds', 'safd', '|', 'dfgdfg', 'sadf', '|', 'dsfg', 'gdfg', 'asdsad', '|', 'gdfgdf', 'dfgdfgdf', 'sdf', '|', 'dfgdfgdf', '|'], '\n']
[0]:
['sdf', 'dfg', 'sdfgsdfsd', '|', 'dsfgsdfsd', 'sd', 'sddffds', 'safd', '|', 'dfgdfg', 'sadf', '|', 'dsfg', 'gdfg', 'asdsad', '|', 'gdfgdf', 'dfgdfgdf', 'sdf', '|', 'dfgdfgdf', '|']
[1]:
Ce que je veux est pour chaque ligne de texte à apparaître comme un groupe séparé(), et il n'est pas clair pour moi pourquoi l'instruction pp.White("\n")
ne correspond pas à la première (j'ai également essayé LineEnd()
, avec le même résultat).
pyparsing ignore l'espace entre les jetons par défaut. Les espaces blancs incluent les nouvelles lignes. – user2357112
Oui, mais j'ai une expression spécifique pour correspondre à la nouvelle ligne. C'est ce qui me dérange. – u38cg
Peu importe. Cela ne va pas l'empêcher de sauter des espaces pour correspondre à plus d'éléments. – user2357112