2017-05-18 11 views
0

Pythonでは、各パッケージ(system、network、another_package)を表す3つのリストを持つことができるように、次のようなテキストを分割する最も良い方法は何ですか?RegExp:区切り文字でテキストを分割する

package system 

config system 'system' 
    option hostname 'test-system' 

package network 

config interface 'lan' 
    option ifname 'eth0' 
    option proto 'none' 

package another_package 

config etc 'etc' 
    option name 'val' 

例:(非常に醜い):

re.split('package ', text) 

あまりにもパッケージ名をキャプチャすることは可能でしょうか?

EDIT - 多分私はそれを考え出した:

re.split('(package\s\w*)', text) 
+0

ファイル構造を管理していますか? YAMLや既に確立されているものを使用してみませんか? –

+0

いいえ、私はOpenWRTとLEDEの設定フォーマットを解析しています – nemesisdesign

答えて

2

あなたの "非常に醜い" re.splitはすでに私の知る限りそれをしません。 1つの可能な調整は、パターンr'^\s*package 'を作成し、複数行フラグre.Mを追加することです。それは、行の最初の単語として「パッケージ」と一致することを保証します。

これは、すべての非空白セクションキャプチャ:

[section.strip() for section in re.split('^\s*package ', text, flags=re.M) if section.strip()] 

を...と各セクションの最初の単語は、パッケージ名です。

関連する問題