Python 如何用PyParsing解析这个字符串?
我想分析:Python 如何用PyParsing解析这个字符串?,python,pyparsing,Python,Pyparsing,我想分析: '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)) resu
'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
一起使用,但在这种情况下不起作用。如果您有任何帮助,我们将不胜感激您肯定走上了正确的道路。在解析单词之前,只需对foo
进行负向前瞻:
parser = Group(ZeroOrMore(~foo + words)) + foo + Group(ZeroOrMore(words))
在最近的pyparsing发行版中,我在ZeroOrMore
和OneOrMore
中添加了一个stopOn
参数,这两个参数做了相同的事情,以减少出错的可能性:
parser = Group(ZeroOrMore(words, stopOn=foo)) + foo + Group(ZeroOrMore(words))
有了这个变化,我得到了:
>>> result.asList()
[['APPLE', 'BANANA'], 'FOO', ['TEST', 'BAR']]
你肯定是在正确的轨道上。在解析单词之前,只需对foo
进行负向前瞻:
parser = Group(ZeroOrMore(~foo + words)) + foo + Group(ZeroOrMore(words))
在最近的pyparsing发行版中,我在ZeroOrMore
和OneOrMore
中添加了一个stopOn
参数,这两个参数做了相同的事情,以减少出错的可能性:
parser = Group(ZeroOrMore(words, stopOn=foo)) + foo + Group(ZeroOrMore(words))
有了这个变化,我得到了:
>>> result.asList()
[['APPLE', 'BANANA'], 'FOO', ['TEST', 'BAR']]
我不知道这个停止论点,谢谢:)我不知道这个停止论点,谢谢:)