○pythonの正規表現でのグループの中身を取得する方法
例えば日付(20160101)のテキストに’-‘を追加して変換したい場合に、年月日毎にグループ化して2016-01-01としたい場合がある。
・pythonでの正規表現グループ取得方法の間違い
text='20160101' date = re.sub( r'([0-9]{4})([0-9]{2})([0-9]{2})', '$1-$2-$3', text )
他の言語の場合は$1,$2,…でうまくいくかもしれないが、pythonでは指定する方法が違う。
・pythonでの正規表現グループ取得の正しい方法
text='20160101' date = re.sub( r'([0-9]{4})([0-9]{2})([0-9]{2})', '\\1-\\2-\\3', text )
(…)
\number
同じ番号のグループの中身とマッチします。グループは1から始まる番号をつけられます。例えば、 (.+) \1 は、 ‘the the’ あるいは ’55 55′ とマッチしますが、 ‘the end’ とはマッチしません(グループの後のスペースに注意して下さい)。この特殊シーケンスは最初の 99 グループのうちの一つとマッチするのに使うことができるだけです。もし number の最初の桁が 0 である、すなわち number が 3 桁の8進数であれば、それはグループのマッチとは解釈されず、 8進数値 number を持つ文字として解釈されます。文字クラスの ‘[‘ と ‘]’ の中の数値エスケープは、文字として扱われます。
\number という特殊シーケンスで、意味は既出グループとなる。
pythonの正規表現操作説明では、’\’とひとつだけのように記載があるので、’\1’とやってしまいがちだが、実際には’\\1’と指定しなければならない。
間違いやすいので要注意!!