249

どうすれば交換できfoobarますfoo123barか?

これは機能しません:

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

これは機能します:

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

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

4

1 に答える 1

413

答えは次のとおりです。

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

于 2011-05-12T21:28:30.517 に答える