使用 pyparsing 累积

acccumulate using pyparsing

我有一些数据可以使用 pyparsing 中的 OneorMore 函数进行解析。像,

fun = OneorMore( foo.setResultsName("foo") +  bar.setResultsname("bar") )

其中 barfoo 是 2 个解析器。

这个函数的问题在于,每次 OneorMore 匹配数据流中的 foo 和 bar 解析器时,与键 "foo""bar" 关联的对应值是 updated.But, 如何累积 foobar 的所有匹配值?

我正在尝试在 Haskell 中实现类似 many1 monadic 解析器的东西,将解析 foobar 的结果保存在代数数据类型中,喜欢

data FooBar a = FooBar a a

many1 :: ParsecT s u m a -> ParsecT s u m [a]

many1 parserFooBar :: ParsecT s u m [FooBar a]

如何在 python 中执行此操作?

我不是 100% 确定我理解你的问题,并且对 pyparsing 生疏,但我认为 Group 会帮助你。

from pyparsing import *

text = 'abc123xyz456def789'
foo = Word(alphas)
bar = Word(nums)
fun = OneOrMore(Group(foo.setResultsName("foo") + bar.setResultsName("bar")))

results = fun.parseString(text)

#Print all foo
print [r.foo for r in results]
#Print all bar
print [r.bar for r in results]