ネストされた括弧を扱おうと正規表現を調べましたが,Pythonの標準のreには,(?R)など再帰が扱えないことが分かり,代わりにregexを使えばよさそう*1ということは分かりましたが,わざわざ正規表現を使わなくてもよいのではと思い,シンプルに書いてみました.
例えば,一番外側の括弧だけを外す関数を実装しました.
def get_bracket_content(self, n): depth = 0 f = 0 for i, c in enumerate(n): if c == "(": depth += 1 if depth == 1: f = i+1 elif c == ")": depth -= 1 if depth == 0: yield n[f:i]
動作を確認します.
get_bracket_content("(1)(2)(3)") >>> ['1', '2', '3'] get_bracket_content("aaa(bb)!(cc(d))") >>> ['bb', 'cc(d)'] get_bracket_content("(()()())") >>> ['()()()']
depthに括弧の深さを記録し,depthに応じた処理をするようにするのが簡単だと思いました.