作者: 藤岡和夫
日時: 2004/7/22(23:30)
On Wed, 21 Jul 2004 23:16:50 +0900
"機械伯爵" <kikwai@...> さんwrote:

>  Win版のPythonの最小コンポーネント(python.exeとpythonXX.dll)を、USB
> ストレージに入れて持ち歩いてますが、reモジュールはsreやらその他の複数
> モジュール構成になってるので、面倒で持ち歩いていません。

 全部入れても40MBまでいかないですから、全部コピーして持ち歩けるのでは・
・・

> ※Perlは使わないので、Perl式正規表現と言われてもピンとこないし・・・

 正規表現は基本的なものならどれも同じようなものです。AWKのつもりで使う
なら問題ないのでは。

> ※ちなみにpcreは色々試してみましたが、オリジナルの知識が無いので結局どう使う
>  のか、判りませんでした。やっぱ、Perlは正規表現だけでもやっといたほうがいい
>  のかな?

 正規表現によるパターンマッチングを利用できると大変便利です。別にPerlで
ないと正規表現が使えないわけではありませんが、使うのには便利な環境とは思
います。

 シフトJISでPythonスクリプトを書く場合(無論SJIS版)、reモジュールを使う
場合には文字列をunicodeに変換して渡す必要があるので、それがスマートでは
ないと感じてしまいます。unicodeを扱うためにスクリプトを書くことが不自由
になったような気がしますね。Perlも同様ですが。Tcl/Tkはしばらく書いていな
いので忘れましたが、うまく解決していたような気がするんだけど。

 Pythonのgrepはこんな感じ。

import os, sys, re
usage = "usage: %s pattern infile [outfile]" % os.path.basename(sys.argv[0])

if len(sys.argv) < 2:
    print usage
else:
    matchstr = re.compile(unicode(sys.argv[1], "mbcs"))
    input = sys.stdin
    output = sys.stdout
    if len(sys.argv) > 2:
        input = open(sys.argv[2])
    if len(sys.argv) > 3:
        output = open(sys.argv[3], 'w')
    for s in input.xreadlines():
        if matchstr.search(unicode(s, "mbcs")):
            output.write(s)

藤岡 和夫
FGALTS@...
kazuf@...
TS Networkのために http://homepage1.nifty.com/kazuf/