3

我正在尝试使用 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 得到的输出告诉我它只解析第一行。谁能帮我找出我做错了什么?

4

1 回答 1

2

看起来你在正确的轨道上。text当您将 the 传递给语法时,也许您做错了什么。在您的代码中添加以下行

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
于 2013-05-09T18:13:06.807 回答