Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何用PyParsing解析这个字符串?_Python_Pyparsing - Fatal编程技术网

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']]

我不知道这个停止论点,谢谢:)我不知道这个停止论点,谢谢:)