ほんじゃらねっと

ダイエット中プログラマのブログ

正規表現で引用符を検索する

TumblrRSS解析を試みていて、そこでQuote登録した文字列を検索して変換しようとしたところ、苦労したのでメモ。

RSSのソースを見たところ、引用した部分は二重引用符で囲まれているようだったので、普通にダブルクオートで検索してみたけどうまくヒットしなかった。

r'(?P<quote>")'


RSSのソースをよく見てみると、普通のダブルクオートとは異なる、特殊な引用符を使ってるみたい。
ord()で確認したところ、\u8220と\u8221というコードの文字を使用していた。他のダブルクオートと区別するためかな?


そこで、下記の方法を試してみたけど、どちらもダメだった。

r'(?P<quote>〈直接文字をペースト〉)'
r'(?P<quote>\u8220)'


色々調べたら、下記のページで、修飾子としてrではなく、urを使えば良い、と書いてあった。
何やらunicodeをうまくやってくれるらしい。
http://stackoverflow.com/questions/393843/python-and-regular-expression-with-unicode


で、これで試す。

ur'(?P<quote>〈直接文字をペースト〉)'
ur'(?P<quote>\u8220)'


試したら、直接文字をペーストした方はうまくいったけど、下の16進数表記はうまくいかなかった。


さらに調べると、下記のようなページに辿りついた。どうやら、一般的なUnicodeではない?らしい。
http://www.fileformat.info/info/unicode/char/201c/index.htm
http://www.fileformat.info/info/unicode/char/201d/index.htm


親切にPythonで表記する方法も書いてあったので、それを試したところ、うまくいった。

ur'(?P<quote>\u201c)' # 開きクオート
ur'(?P<quote>\u201d)' # 閉じクオート


久しぶりにはまったけど、やっぱり文字コードまわりは大変。