TumblrのRSS解析を試みていて、そこで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)' # 閉じクオート
久しぶりにはまったけど、やっぱり文字コードまわりは大変。