Pythonの正規表現についてです。

```

    int abc( int a ){
        if( a > 0 ){
            return 1;
        }else{
            return 0;
        }
    }
    int xyz()
        { return aPtr->type; }
    
```

上のようなテキストを以下のように置換しようとしています。

```

    int abc( int a );
    int xyz();
    
```

そこで次のようなコードを書きました。

```

    pattern = r'(\)\s*\{\s*(?:.+(?R))*.*\s*\})'
    content = regex.sub( pattern, r');', content )
    
```

ところが意図したとおりに置換せず、結果は以下のようになります。

```

    int abc( int a ){
        if( a > 0 );else{
            return 0;
        }
    }
    int xyz();
    
```

(?:...) は ... にマッチしても終了しないということだと理解しているのですが、外側の ){ } にマッチしないのはどうしてでしょうか？

いろいろパターンを変えてやっていますが、基本的なところが理解できていないため、意図したとおりの結果になりません…
CC BY-SA 3.0
2018-03-19T07:44:08.867
42488
2018-03-19T12:48:57.137
27804
question
python 正規表現
Python 正規表現の再帰について
結論から先に言いますと，質問者様はほとんど正解に近いところに至っていて，次のパターンを使えば目的の結果を得られると思います．

```

    pattern = r'\)*\s*\{\s*(?:.+(?R))*.*\s*\}'
    
```

変更点は最初の `\)` を「0個以上」に対してマッチするようにしただけです．

`\R` は pattern 全体を指すので，(?:...) の部分の非終了条件は「`)` から始まるバランスのとれた `{}`
で囲まれた文字列」です．入力テキスト中 `else{...}` の部分は「`)` から **始まらない** バランスのとれた `{}`
で囲まれた文字列」になってしまっているので，ここでマッチが終了して失敗するのだと思います．
CC BY-SA 3.0
2018-03-19T12:48:57.137
42497
2018-03-19T12:48:57.137
27047
42488
answer