gpt4 book ai didi

python - 如何用 PyParsing 解析这个字符串?

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

我想解析:

'APPLE BANANA FOO TEST BAR'

进入:

[['APPLE BANANA'], 'FOO', ['TEST BAR']]

这是我最近的尝试:

to_parse = 'APPLE BANANA FOO TEST BAR'
words = Word(alphas)
foo = Keyword("FOO")
parser = Group(ZeroOrMore(words + ~foo)) + foo + Group(ZeroOrMore(words))
result = parser.parseString(to_parse)

但是会返回以下错误:

>       raise ParseException(instring, loc, self.errmsg, self)
E pyparsing.ParseException: Expected "FOO" (at char 6), (line:1, col:7)

我认为问题来自于“太贪婪”的“ZeroOrMore(words + ~foo))”。根据 SO 上的几个问题,解决方案是使用 ~foo 进行否定,但在这种情况下它不起作用。任何帮助将不胜感激

最佳答案

您绝对走在正确的道路上。您只需在解析 words 之前执行 foo 的否定前瞻:

parser = Group(ZeroOrMore(~foo + words)) + foo + Group(ZeroOrMore(words))

在最近的 pyparsing 版本中,我向 ZeroOrMoreOneOrMore 添加了一个 stopOn 参数,它执行相同的操作,以减少错误 -容易发生:

parser = Group(ZeroOrMore(words, stopOn=foo)) + foo + Group(ZeroOrMore(words))

通过此更改,我得到:

>>> result.asList()
[['APPLE', 'BANANA'], 'FOO', ['TEST', 'BAR']]

关于python - 如何用 PyParsing 解析这个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58781537/

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