2017-01-25 7 views
2

私の人生のためにこれを理解することはできません。 Python 2.7。辞書を検出するための正規表現を構築する

は私が

define something { 
    var val1 
    var val2 
} 

define something_else { 
    var val3 
    var val4} 
... 

のようなものがある設定ファイルを持っていると私はから始まる各「オブジェクト」と一致するようにしたい「を定義します。」私がしたいのは、シーケンスがオブジェクトの内部で発生した場合、基本的にこれらのオブジェクト全体の1つをファイルから削除することです。

は、これまでのところ私は

re.compile(r"(define.+\{\n)((.*\n)*)(\})")

を持っているが、これは最後のインデックスまでのすべてと一致し、文句を言わない}文字に一致します。

私もre.compile(r"(define.+\{\n)((\s*\S*)*)(\})")を試しましたが、それはどちらかと思われません。何らかの理由で、正規表現はすべてをつかんで、閉じ括弧をまったくキャッチしません。

私はちょうど閉じ括弧付きラインが

\n}または}または(some number of spaces) }またはvar valx (some number of spaces) }

のいずれかであることを認識し、私はそれが重要でなければならないとは思いません。

また、設定ファイルは、var/val構文が正しいことを確認するために事前にチェックされています。

答えて

4

あなたは非欲張りように動作し、最初に一致}にだけ行くこと+修飾子を伝える必要があります:

re.findall(r'define [^{]+{[^}]+?}', data) 
# ['define something {\n var val1\n var val2\n}', 
# 'define something_else {\n var val3\n var val4}'] 
+1

ああ、 '追加?修飾子が非貪欲型または最小限のやり方で試合を行うようにする。可能な限り少数のキャラクタがマッチングされる。完全に私の利点にそれを使用していない。私の一致する表現をどのようにして最小限に抑えたかを見ても助かりました。ありがとうございました! – frei

関連する問題