我正在尝试使用pyparsing来解析以下格式的配置文件
x = "/user/test"
y = 3
这是我的代码段
ParserElement.defaultWhitespaceChars = (" \t")
END = StringEnd()
NL = LineEnd().suppress()
assignment = Literal('=')
key_str = CharsNotIn("=")
value_str = Group(~assignment + restOfLine)
line = Group(key_str + assignment + value_str)
lines = ZeroOrMore(line)
lines.ignore(NL)
text = """
y = 3
x = 2
"""
我从parseFile获得的输出告诉我它只解析第一行。有人可以帮我找出我做错了吗?
答案 0 :(得分:2)
看起来你走在正确的轨道上。当你将text
实际传递给语法时,也许你做错了什么。在代码中添加以下行
print lines.parseString(text)
给出预期的输出
[['y ', '=', [' 3']], ['x ', '=', [' 2']]]
顺便说一下,通常你不想要在解析时保留空白。代币通常是唯一重要的东西。这是我解析你的例子的方式:
EOL = LineEnd().suppress()
EQ = Literal("=").suppress()
val = Word(alphanums)
line = Group(val('key') + EQ + val('val') + EOL)
grammar = OneOrMore(line)
for x in grammar.parseString(text):
print x.dump()
这种情况下的输出更好
['y', '3']
- key: y
- val: 3
['x', '2']
- key: x
- val: 2