今川館

都内勤務の地味OLです

マルチバイト文字を含む正規表現のパターンを定義するときはunicodeでパターンを書かないと予期せぬ結果をもたらす

adminuser.pyを書いていたときにはまったのがこの問題。
reモジュールを使って半角と全角のスペースで文字列をsplitしようとしたのだが、
正規表現パターンをstrで渡してしまいおかしな文字列分割が行われてはまった。

regex1 = re.compile(r"[  ]+")
regex2 = re.compile(ur"[  ]+")

regex1はstrを渡している。これが良くない。
マルチバイト文字を含む正規表現パターンを使うときは必ずregex2のようにunicodeを渡さないと、以下のように「瀬名 氏俊」が

?名氏俊
瀬名氏俊

はて?な 氏俊 になってしまうのだ。

なんともくだらない初歩的なミスにはまって悔しいので記念にブログにつけておこう。

この間抜けな例のgistはこちら ( https://gist.github.com/1073430 )