この記事ではPython 2.7を使用して確認しています。
グループ置換の基本
re.sub()
を使用して正規表現のグループ置換をしたいとき、通常はこのように書く。
(※ グループ番号1の前に'\'
を2回書くのに注意)
re.sub(r'(hoge)', '\\1bar', 'hogefoo')
# 結果:
# 'hogebarfoo'
エラーになるケース
しかし、この書き方だとグループ番号の後に数字を置きたい場合、以下のようなエラーになってしまう。
# '第三'を'第3'にしたい
re.sub(r'(第)三', '\\13', '第三')
# 結果:
# ...
# raise error, "invalid group reference"
# sre_constants.error: invalid group reference
これはグループ番号が1ではなく(上記の例では)13として認識されてしまうためである。
対応方法
このようなときは、以下のように書くことで解決できる。
re.sub(r'(第)三', '\g<1>3', '第三')
# 結果:
# 第3