foobar
をfoo123bar
に置き換えるにはどうすればよいですか?
これは機能しません:
>>> re.sub(r'(foo)', r'\1123', 'foobar')
'J3bar'
これは動作します:
>>> re.sub(r'(foo)', r'\1hi', 'foobar')
'foohibar'
\number
のようなものがある場合、これは一般的な問題だと思います。誰もこれを処理する方法についてのヒントを教えてもらえますか?
答えは:
re.sub(r'(foo)', r'\g<1>123', 'foobar')
ドキュメントからの関連する抜粋:
上記の文字のエスケープと後方参照に加えて、\ gは(?P ...)構文で定義されたnameという名前のグループに一致する部分文字列を使用します。\gは、対応するグループ番号を使用します。したがって、\ g <2>は\ 2と同等ですが、\ g <2> 0などの置換では曖昧ではありません。\20は、グループ2への参照であり、その後にリテラル文字「0」が続くグループ20への参照として解釈されます。後方参照\ g <0>は、REに一致する部分文字列全体を置換します。