Pythonメモ:trは必須だろう
Pythonのstring.translateやstring.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はいらない。