2016-07-11 13 views
1

私はPythonで書いてのは、私はこのように見ているファイルを持っているとしましょうよ:Pythonの正規表現の中括弧は、複数行の

aaa 

aaa "word" --sdsdrrr2 --sds { 

test test 
} 

aaa "word2" --sdsdd sdsd { 

    fffsd 
    ssss 
} 

aaa "word3" -sdksdld sdsd 

{ 

    sdsdd 
    sdsddd 
    sdsdddd } 

今私は、接頭辞と接尾語を含む「WORD2」の出力を解析するため、出力はなります:

aaa "word2" --sdsdd sdsd { 

    fffsd 
    ssss 
} 

は、次のコードを試してみました:

f = open('/tmp/testt2') 

for res in re.findall('aaa "word2" (.*?)}', f.read(), re.S): 
    print res                         

は、専用にすることなく、試合の一部ですギンニングとカールの終わり。

ご注意:中括弧の間の線の

  • 数は不明です。
  • 正規表現は必須です。上記の例のように、中括弧の位置も不明です(間隔を置いてもしなくても、改行してもいなくてもかまいません)。

任意の助けてくれてありがとう、

+0

あなたがコピーした場合、 '{'あなたは開口部が欠落しているとregexその貼り付けました。さらに、[DOTALL](https://docs.python.org/2/library/re.html#re.DOTALL) – RedX

+0

が必要ですが、値全体が必要な場合は、なぜキャプチャグループを使用するのですか? 'aaa" word2 "。*?}を使用してください。 –

答えて

0

あなたは好きでそれを行うことができます:

^(?=.*"word2") #^- start of the line with pos. lookahead 
[^{]+  # anything not a { 
{[^}]+}  # followed by {, anything in between and a closing } 

a demo on regex101.comなどa working fiddle on ideone.comを参照してください。

+0

はword2/3で動作しますが、" word "が必要な場合はすべてを返します。 – NoamD

+0

@NoamD:単語を二重引用符で囲みます。 – Jan

+0

'^(?=。* "単語") [^ {] + {[^}] +}'私は、これが十分であると思います。 – bhansa

関連する問題