1

演習として pyparsing を使用して統合差分ファイルを解析しようとしていますが、うまくいきません。ここに問題を引き起こしている差分ファイルの部分があります:

(... some stuff over...)
 banana
+apple
 orange

最初の行は " " で始まり、次に "banana" です。行を解析するための次の式があります。

linestart = Literal(" ") | Literal("+") | Literal("-")
line = linestart.leaveWhitespace() + restOfLine

これは単一行を解析するときに機能しますが、ファイル全体を解析しようとすると、「leaveWhitespace」命令によってパーサーが最後の行の終わりから開始されます。私の例では、「バナナ」を解析した後、次の文字は「\n」(leaveWhitespace のため) であり、パーサーは「」または「+」または「-」と一致させようとするため、エラーがスローされます。

どうすればこれを正しく処理できますか?

4

1 に答える 1

1

一度に 1 行ずつ読み取って解析できます。次のコードは私にとってはうまくいきます。

from pyparsing import Literal, restOfLine

linestart = Literal(" ") | Literal("+") | Literal("-")
line = linestart.leaveWhitespace() + restOfLine

f = open("/tmp/test.diff")
for l in f.readlines():
  fields = line.parseString(l)
  print fields

そして、出力は

[' ', 'banana']
['+', 'apple']
[' ', 'orange']

または、複数の行を解析する必要がある場合は、明示的に LineEnd を指定できます

linestart = Literal(" ") | Literal("+") | Literal("-")
line = linestart.leaveWhitespace() + restOfLine + LineEnd()
lines = ZeroOrMore(line)
lines.parseString(f.read())
于 2010-11-20T11:28:34.053 に答える