Pythonメモ:trは必須だろう

Pythonのstring.translatestring.maketransが情けないので、自分で少し書いてみた。stringmisc.py。デフォルトのstring.translateより少しはマシだと思う。

import stringmisc
print stringmisc.tr("a-z0-9", "A-Z2-90-1", "test0123")

結果は以下のようになる。

TEST2345

ドキュメントのかけらも書いてないのは申し訳ない。

Unicodeにも対応しているので、ひらがな←→カタカナ変換とか全角←→半角変換にも使える。たぶん、ROT13変換とかにも使えるのだろう。そういう、デフォルトの変換セットとか作っておこうかなぁ。

あと、PHPのtrは連想配列(Python用語だと「辞書」?)を引数に取ることができるが、これはstring.tr_array()という別関数にしてみた。連想配列のキーに正規表現を使うかそうでないかのフラグをつけて。ただ、これでもあんまり厳密じゃないんだよなぁ。Pythonの正規表現は意外にも最長マッチではないみたいで、re.split("(a|abc)", "abcde")['', 'abc', 'de']ではなくて['', 'a', 'bcde']になる。

trはre.subの繰り返しでは実現できないわけだから、あらかじめ作っておいてほしいよ。

PHPのtrを知ったときは目から鱗だった。そうだよ、そうなんだよ、と。

(追記) 2004-03-22 16:53

今さら気づいたんだけど、ちょっとバグっていた。range(ord(str[i-1])+1,ord(str[i+1])-1):じゃなくて、range(ord(str[i-1])+1,ord(str[i+1])):だった。-1はいらない。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です