我有我的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