正規表現ではバックスラッシュ(\)が多用される。一方Pythonの文字列ではこのバックスラッシュが特別な意味を持つことがある。例を挙げる:
>>> len('\section')
8
>>> len('\next')
4
>>>
文字列でバックスラッシュに続けてnがあるとそれらの2個で特別な意味を持つ1文字となる。だから文字列’\section’では文字数が8文字であることと対照的に文字列’\next’は4文字となる。この特別な意味を持つ1文字をエスケープシーケンスと呼ぶ(なぜエスケープシーケンスと呼ぶかは最初<Esc>キーをエスケープ文字にした歴史的な経緯による)。
正規表現もPython文字列である。しかもバックスラッシュが多用される。そのバックスラッシュがエスケープ文字として働くと厄介なことが起きる。
これを回避する一つの方法が通常の文字列の代わりにraw_stringを用いるものである。この記法は通常の文字列の前にrを付ける。実例を示す:
>>> len(r'\next')
5
>>>
この記法ではエスケープシーケンスはその特別な意味を失い、単なる普通の二文字となる。
この記法で書けばエスケープシーケンスが紛れ込むことを気にしないで正規表現を記述できる。例を示す:
#coding: utf-8
import re
text = r'次の節は\nextで始める'
m = re.search(r'\\next', text)
print(m.group(0))
正規表現の中の\\は正規表現の特別文字、バックスラッシュを普通の文字とするためである。