>75 正規表現を2回使ってるけど,1回で目的は実現できると思う. p = re.compile(ur'(.*?。それは(「.*?である。」))') として, L = p.findall(line) とする. 最短一致".*?"を使うことで1行に (A。それは「Bである。」) が複数あってもLには (A。それは「Bである。」) のパターンに当てはまる全ての要素が格納される. でもって,「.*?である。」を半角カッコでくくることでグループのリストが入る.(参考: ttp://d.hatena.ne.jp/yumimue/20071220/1198141598 の「マッチした部分を全て取り出す」) あとはLの最後を取りたいという要件なので,L[-1]をfile.txtに書けば良い.
以上を踏まえて,こんな感じでどうでしょうか? # coding: utf-8 import re, codecs p = re.compile(ur'(.*?。それは(「.*?である。」))') f = codecs.open('file.txt', 'w', 'utf-8') for line in codecs.open('a.txt', 'r', 'utf-8'): L = p.findall(line) if L: f.write(L[-1] + '\r\n') print L[-1] f.flush() f.close()