1

pyparsing を使用して、2 つの既知の行の間の行のブロックを取得しようとしています。例えば:

ABC
....
DEF

私のpythonコード:

end = Literal("\n").suppress()
firstLine = Literal("ABC") + SkipTo(end)
secondLine = Literal("DEF") + SkipTo(end)
line = SkipTo(end)
test = firstLine + OneOrMore(line) + secondLine

test.searchString(myText)

-->しかし、それは動作しません。Python がハングするだけです。誰かがそれを行う方法を教えてもらえますか?

ありがとう、

4

2 に答える 2

1

このデバッグコードをプログラムに追加します。

firstLine.setName("firstLine").setDebug()
line.setName("line").setDebug()
secondLine.setName("secondLine").setDebug()

searchStringをparseStringに変更します。setDebug()は、式が一致しようとするたびに出力し、一致した場合は一致したもの、一致しなかった場合は例外を出力します。あなたのプログラムで、これらの変更を行った後、私は次のようになります。

Match firstLine at loc 0(1,1)
Matched firstLine -> ['ABC', '.... ']
Match line at loc 11(3,1)
Matched line -> ['DEF ']
Match line at loc 15(3,1)
Exception raised:Expected line (at char 17), (line:4, col:2)
Match secondLine at loc 15(3,1)
Exception raised:Expected "DEF" (at char 16), (line:4, col:1)
Traceback (most recent call last):
  File "rrrr.py", line 19, in <module>
    test.parseString(myText) 
  File "C:\Python25\lib\site-packages\pyparsing-1.5.5-py...
    raise exc
pyparsing.ParseException: Expected "DEF" (at char 16), (line:4, col:1)

おそらくあなたが期待したものではありません。

于 2010-10-29T01:19:20.480 に答える
0

私はついに私の質問に対する答えを見つけました。

end = Literal("\n").suppress()
firstLine = Literal("ABC") + SkipTo(end)
secondLine = Literal("DEF") + SkipTo(end)
line = ~secondLine + SkipTo(end)
test = firstLine + OneOrMore(line) + secondLine

test.searchString(myText)

それは私にとってはうまくいきます。

于 2010-10-30T02:28:32.590 に答える