web-dev-qa-db-ja.com

python re.subグループ:\ numberの後の番号

foobarfoo123barに置き換えるにはどうすればよいですか?

これは機能しません:

>>> re.sub(r'(foo)', r'\1123', 'foobar')
'J3bar'

これは動作します:

>>> re.sub(r'(foo)', r'\1hi', 'foobar')
'foohibar'

\numberのようなものがある場合、これは一般的な問題だと思います。誰もこれを処理する方法についてのヒントを教えてもらえますか?

142
zhigang

答えは:

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に一致する部分文字列全体を置換します。

255
John Gaines Jr.