読者です 読者をやめる 読者になる 読者になる

日本語検索便乗検証(殿、それには落とし穴がありまする編)

via ときどきの雑記帖様。

■[ぁ-ヶ]|[亜-黑]
日本語を検索する場合に使う正規表現Shift_JISの範囲であればまずこれで足りる。

内部Unicode化されたものに関しては思い通りに行きません。
...
ちなみにこの辺の事情は、gawkGNU sedGNU grepPythonなんかでも同じです。

404 Not Found

「日本語を検索」って結構やりたい事あると思うので。
utf-8としてPythonでもチェック。

うお。黑が文字参照としてうってもソースコード中にでないなぁ。
?がそれです。

#!/usr/bin/env python
# encoding: utf-8
import sys
import os
import re

mpt = (re.compile(u'[亜-煕]'), re.compile(u'[亜-?]'))

def main():
    target = u'漢字正規表現亜腕一十百千万億兆京'
    for mp in mpt:
        print "pattern = %s, target = %s" % ( mp.pattern.encode('utf-8'), target.encode('utf-8'))
        ml = mp.findall(target)
        for m in ml:
            print m.encode('utf-8'),
        print 
    pass


if __name__ == '__main__':
    main()

pattern = [亜-煕], target = 漢字正規表現亜腕一十百千万億兆京
漢 字 正 亜 十 千 億 兆 京
pattern = [亜-黑], target = 漢字正規表現亜腕一十百千万億兆京
漢 字 正 規 表 現 亜 腕 十 百 千 億 兆 京

JavaC#と同じ結果に。
きむらさんはすごいなあ。

追記:
元ネタのはてブを見ると元々は [亜-鄢]だったのかな。

pattern = [亜-鄢], target = 漢字正規表現亜腕一十百千万億兆京
漢 字 正 規 表 現 亜 腕 十 百 千 億 兆 京

まぁ、抜けるのは一緒なんですけど。

追追記:
re.compile(u'[亜-万]')
とテストで書こうとすると
error: bad character range
と言われてしまう。ううむ。
文字コードに弱いTextMateではつらくなってきた。