[英]How to parse this string with 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))
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 版本中,我為ZeroOrMore
和OneOrMore
添加了一個stopOn
參數,它做同樣的事情,以減少出錯的可能性:
parser = Group(ZeroOrMore(words, stopOn=foo)) + foo + Group(ZeroOrMore(words))
通過此更改,我得到:
>>> result.asList()
[['APPLE', 'BANANA'], 'FOO', ['TEST', 'BAR']]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.