re.subのなかで関数呼べないんかよ
とある事情でHTML文書のなかの半角カナを全角カナに変換したかったのですが、ググってもそのものずばりのページはヒットしませんでした。しかたなく自分で書いてみました。言語はpythonです。
まず、半角を全角に変換してくれるjaconvモジュールと、正規表現の後方参照を使ってつぎのように書いてみました。
1 2 3 4 5 |
import re import jaconv html = "なんとかしろゴラァ" html = re.sub("([ヲ-ン][゚゙]?[ヲ-ン゚゙]*)", jaconv.h2z("\1"), html) print(html) |
実行結果はこうなりました。
1 |
なんとかしろ |
半角を全角にするのではなく、半角がどこかへいってしまった。どうやらre.sub関数の引数に関数を書いてもうまくいかないようだ。。。
ていうか、プログラムのコードをブログに書くのにpreタグを使うのは一般的なのか?邪道なのか?あとで調べよう。
re.subのなかで関数呼べた^^
こちらのページを参考にしつつ、あらたにコードをこしらえました。
1 2 3 4 5 |
import re import jaconv html = "なんとかしろゴラァ" html = re.sub("([ヲ-ン][゚゙]?[ヲ-ン゚゙]*)", lambda m: jaconv.h2z(m.group(1)), html) print(html) |
なるほど、こうすれば関数の引数で関数を呼べるのか。つぎのようにうまいこと変換してくれました。ありがたやありがたや。
1 |
なんとかしろゴラァ |
うん、これくらいの雑な文章でも、未来の自分ならギリ読めるだろ。どうせ自分用メモだ。
メモならローカルにエディタで書けよウェブにゴミまくんじゃねぇって話ですが、テキストだけじゃ表現力にとぼしいからHTMLで書きたいし。じゃあローカルにHTMLで書けよって話ですが、それってなんだかむなしいんですよね。なんででしょう。