gpt4 book ai didi

python - 解析特殊字符旁边的关键字(pyparsing)

转载 作者:太空宇宙 更新时间:2023-11-03 16:17:05 24 4
gpt4 key购买 nike

使用 pyparsing,如何匹配特殊字符(如“{”或“}”)之前或之后的关键字?下面的代码显示我的关键字“msg”不匹配,除非它前面有空格(或在开头):

import pyparsing as pp

openBrace = pp.Suppress(pp.Keyword("{"))
closeBrace = pp.Suppress(pp.Keyword("}"))
messageKw = pp.Keyword("msg")
messageExpr = pp.Forward()
messageExpr << messageKw + openBrace +\
pp.ZeroOrMore(messageExpr) + closeBrace

try:
result = messageExpr.parseString("msg { msg { } }")
print result.dump(), "\n"
result = messageExpr.parseString("msg {msg { } }")
print result.dump()
except pp.ParseException as pe:
print pe, "\n", "Text: ", pe.line

我确信有一种方法可以做到这一点,但我一直找不到它。

提前致谢

最佳答案

openBrace = pp.Suppress(pp.Keyword("{"))
closeBrace = pp.Suppress(pp.Keyword("}"))

应该是:

openBrace = pp.Suppress(pp.Literal("{"))
closeBrace = pp.Suppress(pp.Literal("}"))

或者甚至只是:

openBrace = pp.Suppress("{")
closeBrace = pp.Suppress("}")

(大多数 pyparsing 类会自动将字符串参数 "arg" 提升为 Literal("arg")。)

当我的解析器有很多标点符号时,我不会像这样有一大堆丑陋的语句,而是将它们折叠成这样:

OBRACE, CBRACE, OPAR, CPAR, SEMI, COMMA = map(pp.Suppress, "{}();,")

您看到的问题是 Keyword 查看紧邻的字符,以确保当前字符串在真正嵌入到更大的类似标识符的字符串中时不会被意外匹配。在 Keyword('{') 中,只有在没有可能被混淆为较大单词的一部分的相邻字符的情况下,此方法才有效。由于“{”本身并不是真正的典型关键字字符,因此使用 Keyword('{') 并不是该类的良好用途。

仅对可能被误解为标识符的字符串使用关键字。对于不在典型关键字字符集中的匹配字符(“关键字字符”是指字母数字 + '_'),请使用 Literal

关于python - 解析特殊字符旁边的关键字(pyparsing),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38858479/

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