使用 pyparsing 累积
acccumulate using pyparsing
我有一些数据可以使用 pyparsing 中的 OneorMore
函数进行解析。像,
fun = OneorMore( foo.setResultsName("foo") + bar.setResultsname("bar") )
其中 bar
和 foo
是 2 个解析器。
这个函数的问题在于,每次 OneorMore
匹配数据流中的 foo 和 bar 解析器时,与键 "foo"
和 "bar"
关联的对应值是 updated.But,
如何累积 foo
和 bar
的所有匹配值?
我正在尝试在 Haskell 中实现类似 many1 monadic 解析器的东西,将解析 foo
和 bar
的结果保存在代数数据类型中,喜欢
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]
我有一些数据可以使用 pyparsing 中的 OneorMore
函数进行解析。像,
fun = OneorMore( foo.setResultsName("foo") + bar.setResultsname("bar") )
其中 bar
和 foo
是 2 个解析器。
这个函数的问题在于,每次 OneorMore
匹配数据流中的 foo 和 bar 解析器时,与键 "foo"
和 "bar"
关联的对应值是 updated.But,
如何累积 foo
和 bar
的所有匹配值?
我正在尝试在 Haskell 中实现类似 many1 monadic 解析器的东西,将解析 foo
和 bar
的结果保存在代数数据类型中,喜欢
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]