SSブログ

検索と置換と正規表現 [プログラム]

 エディタで編集をする場合、検索と置換は最も有用な機能である。と思うのだが、余りエディタを使わない人、Wordを主に使い、時にメモ帳でプレーンテキストを使うだけのような人は、一体どれくらい検索・置換を使っているだろうか。

 そのうち、検索は、それなりに分かりやすいかも知れない。おそらくインターネットでの検索(Googleのように検索語句で検索するような)ならば、よく使っているだろう。表示した一つのページの中で、何かを検索することもしばしばあるだろう。そのことからの連想で、ワープロやエディタでも同じように、検索することはあるかも知れない。とは言っても、正規表現で検索するようなことは少ないはずだ。そもそも、テキスト編集によく使われるMS Wordの検索機能は、すごく使いづらい。特殊文字とか言って、非標準の記号を使う。正規表現と似ているが少しずつ違っているものを、独自の記号に割り当てている。これはとても覚える気がしない。

 実際に編集作業に威力を発揮するのは、置換の方である。しかし、これはWebサーフィンでは必要ないこともあり、テキスト編集中にもほとんど使われないのではないだろうか。単純な置換であっても、かなりの省力化になるはずだ。

 たとえば、まったくでたらめな内容だが、次のようなJavaのコードを再利用して、Pythonのスクリプトに書き換えるとしよう。

System.out.println("abcd " + (1 + 2 + 3) + " efgh");
System.out.println("ijkl " + (4 + 5 + 6) + " mnop");
System.out.println("qrst " + (7 + 8 + 9) + " uvwx");
System.out.println("yzAB " + (10 + 11+ 12) + " CDEF");

これは、Pythonでは、

print "abcd ", (1 + 2 + 3), " efgh"
print "ijkl ", (4 + 5 + 6), " mnop"
print "qrst ", (7 + 8 + 9), " uvwx"
print "yzAB ", (10 + 11+ 12), " CDEF"

と書かれる。このように書き換えるためには、

  1. System.out.println( を print に置換する。
  2. " + ( を ", ( に置換する。
  3. ) + "を、), に置換する。
  4. ); を空文字列に置換する。つまり、削除する。

というように、何度か置換を繰り返す。

 このような置換をする場合、対象となる文字列をよくよく観察し、そこに一定の法則を発見することだ。法則性があれば、それをいっきに置換することができる。あるいは何もない文字列に置換すれば、削除することができる。

 正規表現を使えるようになれば、もっといろいろなことができるようになる。たとえば、(や)の前後にあるスペースを削除する、という課題があるとき、あるいは、二行以上の空行を削除する、という課題があるとき、簡単な正規表現が使えれば、非常に効率的に置換をすることできる。もし正規表現を使わなければ、いくつあるか分からないスペースや空行を一々指定しなければならないことになる。そして今よりも忙しくなる。

 とはいえ、これまで正規表現を教えていて、うまくいった試しがない。その場その場でホワイトボードでやった置換をやってみるところまではいいが、その先に、応用問題を考えさせると、もう、固まってしまう。どのように教えたら、正規表現 を身に付けられるか、今年も何らかの工夫をこらしたいと思う。。

 まあ、最初は単純な検索や置換をして、編集作業に慣れるようにしよう。そして、単純な正規表現を使ってみよう。最初は3つ、4つの記号(たとえば、*, +, . , \n, ^, $, 繰り返しの数、など)だけを使って、いろいろな検索をしてみよう。また、()を使って、検索語句をグループ化し、それを置換でも利用してみよう。これだけができてもかなりの効率化ができるようになる。そして、できるだけ大きな文書で、置換を試してみよう。


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

みどりの日─偶然と運命教育用Knoppix ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。