プログラミング言語pythonを使用する上で、正規表現などの作法でハマった注意点の覚書

シェアする

スポンサーリンク

○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 を持つ文字として解釈されます。文字クラスの ‘[‘ と ‘]’ の中の数値エスケープは、文字として扱われます。

7.2. re — 正規表現操作 (原文より

\number という特殊シーケンスで、意味は既出グループとなる。

pythonの正規表現操作説明では、’\’とひとつだけのように記載があるので、’\1’とやってしまいがちだが、実際には’\\1’と指定しなければならない。

間違いやすいので要注意!!

error: