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();

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

いろいろパターンを変えてやっていますが、基本的なところが理解できていないため、意図したとおりの結果になりません…