正規表現と文字列 s が与えられた場合、正規表現に一致する s の部分文字列が括弧で囲まれた新しい文字列を生成したいと思います。
例: 元の文字列 s は "Alan Turing 1912-1954" で、正規表現はたまたま "1912-1954" と一致します。新しく生成された文字列は「Alan Turing (1912-1954)」のはずです。
解決策 1:
>>> re.sub(r"\d{4}-\d{4}", r"(\g<0>)", "Alan Turing 1912-1954")
'Alan Turing (1912-1954)'
\g<0>
マッチ全体への後方参照です (\0
動作しません; と解釈されます\x00
)。
解決策 2:
>>> regex = re.compile(r"\d{4}-\d{4}")
>>> regex.sub(lambda m: '({0})'.format(m.group(0)), "Alan Turing 1912-1954")
'Alan Turing (1912-1954)'