2017-11-13 15 views
-1

のために私は私が「COMPONENT」のリスト/タプルを取得することができ、トラブル(re.findallのための単一の行の正規表現を書く)を抱えていPython正規表現検索/ findall。コンフィグフォーマット

[COMPONENT1] 
KEY1=Value 
KEY2=Value 
KEY3=Value 

[COMPONENT2] 
KEY1=Value 
KEY2=Value 
KEY3=Value 
KEY4=Value 

次の形式で設定ファイルを持っています(s)とそれに対応するそれぞれの "KEY(n)" - "VALUE"のペアを繰り返します。

これまでのところ、私は、次の正規表現

with open(conf,"r") as config:  
    match = re.findall(r,"?:\[(\w+)\](?:\s*\n*)(?:(\w+(?:\s*=\s*).+)))", config.read()) 

を試してみましたが、それは私が他の「キー=値」のペアを表示することができます正規表現を策定することができません

Match 1 
Group1: 'COMPONENT1' 
Group2: 'KEY1=VALUE' 

Match 2 
Group1: 'COMPONENT2' 
Group2: 'KEY1=VALUE' 

を返します。

本当にありがとうございます。

注:この設定書式は変更できません。

+0

これまでに何を試みていますか?あなたのコードであなたの質問を編集してください。 – SRD

+0

[iniファイル内のすべての内容をPythonで辞書に読み込む](https://stackoverflow.com/questions/3220670/read-all-the-contents-in-ini-file-into-dictionary-with-python/ 3220891#3220891)。 –

+0

@SRD、コードスニペットを追加しました。 –

答えて

3

これは正規表現を使用することをお勧めしません。正規表現は素晴らしいかもしれませんが、設定ファイルのようなもので作業しようとすると、読みたいものを構造化するのにはあまり役に立ちません。あなたはひとつひとつ該当する行 1行だけを取る[Section Name]またはkey=valueと同様に構成されることを保証することができない限り、 yadda yadda yadda、正規表現は、設定ファイルの構文解析および利用が複雑になります。

共有した正規表現では、[Section Name]の後にkey=valueのペアがある場合にのみ一致します。 key=valueのペアは、先頭に「[Section Name]」がないため無視されます。これは、正規表現を読み込み設定などに少し不適切なものにする部分の一部です。あなたの正規表現で扱わなければならない設定ファイルを構造化するときに条件が発生し、それがタスクのために必要な時間よりも長くて複雑になるか、誰かがそれを維持する必要があるときでなければなりません。

ConfigParserは、あなたが簡単に.INI形式の設定ファイルを読み込むことができます、と私は任意key=valueペアを読んでハードワークのほとんどとしてそれを使用しようとしているが、すでに解決していることをお勧めのpythonモジュールです。

+0

ありがとう、これは働いて、私のために多くの仕事を減らしました。 –