読者です 読者をやめる 読者になる 読者になる

今川館

都内勤務の地味OLです

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

Python 正規表現

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

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

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

?名氏俊
瀬名氏俊

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

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

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