gpt4 book ai didi

python - pyparsing 和换行符

转载 作者:太空狗 更新时间:2023-10-29 20:47:41 25 4
gpt4 key购买 nike

我刚开始使用 pyparsing,遇到换行问题。

我的语法是:

from pyparsing import *

newline = LineEnd () #Literal ('\n').leaveWhitespace ()
minus = Literal ('-')
plus = Literal ('+')
lparen = Literal ('(')
rparen = Literal (')')
ident = Word (alphas)
integer = Word (nums)

arith = Forward ()
parenthized = Group (lparen + arith + rparen)
atom = ident | integer | parenthized

factor = ZeroOrMore (minus | plus) + atom
arith << (ZeroOrMore (factor + (minus | plus) ) + factor)

statement = arith + newline
program = OneOrMore (statement)

现在当我解析以下内容时:

print (program.parseString ('--1-(-a-3+n)\nx\n') )

结果符合预期:

['-', '-', '1', '-', ['(', '-', 'a', '-', '3', '+', 'n', ')'], '\n', 'x', '\n']

但是当第二行可以被解析为第一行的尾部时,第一个 \n 就被魔法掉了吗?

代码:

print (program.parseString ('--1-(-a-3+n)\n-x\n') )

实际结果:

['-', '-', '1', '-', ['(', '-', 'a', '-', '3', '+', 'n', ')'], '-', 'x', '\n']

预期结果:

['-', '-', '1', '-', ['(', '-', 'a', '-', '3', '+', 'n', ')'], '\n', '-', 'x', '\n']

其实我不希望解析器自动连接语句。

<强>1。我做错了什么?

<强>2。我该如何解决这个问题?

<强>3。导致这种行为的幕后原因是什么(这当然是明智的,但我就是不明白这一点)?

最佳答案

'\n' 通常作为空白字符被跳过。如果您希望 '\n' 有意义,那么您必须调用 setDefaultWhitespaceChars 将 '\n' 删除为可跳过的空格(您必须在定义任何 pyparsing 表达式之前执行此操作):

from pyparsing import *
ParserElement.setDefaultWhitespaceChars(' \t')

关于python - pyparsing 和换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21369911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com