簡體   English   中英

如何用 PyParsing 解析這個字符串?

[英]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 版本中,我為ZeroOrMoreOneOrMore添加了一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM