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。コードに次の行を追加します

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 に答える