foobar
を に置き換えるにはどうしたらいいですかfoo123bar
?
これは機能しません:
>>> re.sub(r'(foo)', r'\1123', 'foobar')
'J3bar'
これは機能します:
>>> re.sub(r'(foo)', r'\1hi', 'foobar')
'foohibar'
ベストアンサー1
答えは次のとおりです。
re.sub(r'(foo)', r'\g<1>123', 'foobar')
関連抜粋ドキュメント:
上で説明した文字エスケープとバック参照に加えて、は、構文で定義されているように、
\g<name>
という名前のグループに一致する部分文字列を使用します。は対応するグループ番号を使用します。したがって と同等ですが、 などの置換ではあいまいではありません。は、リテラル文字 が続くグループ 2 への参照ではなく、グループ 20 への参照として解釈されます。バック参照は、RE に一致する部分文字列全体に置き換えられます。name
(?P<name>...)
\g<number>
\g<2>
\2
\g<2>0
\20
'0'
\g<0>