2017-12-12 17 views
1

初心者の質問に申し訳ありませんが、この問題は私を苦労させています。pyparsingとnestedExprで開始点を設定する際の問題

私のようなものに見えるルータの設定入力ファイルがあります。

今pyparsingとnestedExprを使用して
groups { 
...some nested info... 
} 
some text.... 
system { 
...some nested info... 
} 
chassis { 
...some nested info... 
} 

を、私は最初の部分「グループ」を解析することができ、私は完璧ですリスト内のリストのセットを取得しますしかし、私は「システム」または「シャーシ」に続けることはできません。

理想的には、私は 'シャーシ'から始めて、そのセクションからリストのリストを取得したいだけです。

pyparsingとnestedExprを取得してファイル全体を実行する方法や特定の時点で開始する方法はありますか?

私の現在のコードは、私はそれはシャーシのからに開始するにはどのように理想的な、非常に単純です:

from pyparsing import *  

with open('newfile.txt') as routerFile: 
    test = routerFile.read() 

    expr = Word(alphas) + nestedExpr('{','}') 
    print expr.parseString(test) 
+0

'' chassis''は '' system''にネストされていますか?システムのネストされた情報の後に ''} ''でなければなりませんか? – PaulMcG

+0

ええ、シャーシとシステムは別々になっています。 –

答えて

0

OK、私は十分に懸命に探索していなかったように見えます。

私はこの記事はあなたがより大きなテキストのだけ選択されたビットを解析したいときは、オプションのカップルを持っている私に答えParsing TCL lists in Python

0

を与えると考えています。

1つは、パイピングのSkipToクラスを使用することです。

from pyparsing import Word, SkipTo 

text = "AAA stuff I dont care about BBB more junk" 

part1 = Word("A") 
part2 = Word("B") 
parser = part1 + SkipTo(part2) + part2 

print(parser.parseString(text).asList()) 

プリント

['AAA', 'stuff I dont care about ', 'BBB'] 

あなた本当にSkipTo(part2).suppress()を使用し、ものを介在することを望んでいない場合。

テキストを選択する別の方法は、this answerで説明されているように、parseStringの代わりにscanStringまたはsearchStringを使用することです。

関連する問題