我有我的PyParsing语法下面的测试代码:如何循环ParseResults在pyparsing
from pyparsing import Word, nums, alphas, delimitedList, Group, oneOf
from pprint import pprint
field = Word(alphas)("field")
operator = oneOf("= +")("operator")
string_value = Word(alphas)("string")
int_value = Word(nums).setParseAction(lambda t: int(t[0]))("int")
value = (string_value | int_value)("value")
expression = Group(field + operator + value)("expression")
grammar = Group(delimitedList(expression, delim="&&"))("expr_list")
def test(s):
print "Parsing '{0}'".format(s)
tokenized = grammar.parseString(s)
for f in tokenized:
e = f.expression
pprint(dict(e.items()))
if __name__ == "__main__":
test("foo=1")
test("foo=1 && bar=2")
test("foobar=2 && snakes=4")
输出是相当意外 - 看来我只有得到tokenized
的最后表达:
Parsing 'foo=1'
{'field': 'foo', 'int': 1, 'operator': '=', 'value': 1}
Parsing 'foo=1 && bar=2'
{'field': 'bar', 'int': 2, 'operator': '=', 'value': 2}
Parsing 'foobar=2 && snakes=4'
{'field': 'snakes', 'int': 4, 'operator': '=', 'value': 4}
我该如何解决这个问题?
nope,没有工作:( - 编辑的问题也是。 – Kimvais 2012-08-10 06:34:03
是的,我在猜测问题时太快 - 请看更多的编辑。 – PaulMcG 2012-08-10 06:55:16
Thanks! - 现在我正面临一个带有通配符的新问题,但会打开一个新的问题,如果不能解决我自己!:) – Kimvais 2012-08-10 07:09:18