このところASP.NETというのを猛烈に勉強している。
まだまだ初心者なのだが、先日時間があったので勉強を兼ねて実用的なツールを作ってみた。
名付けて
オンライン正規表現データ変換 V1.0
である。
ASP.NETとは、ワテの少ない理解では、.NET Framework を使ってIISサーバー上にWebアプリケーションを開発できる技術と言う感じかな。
以下のサイトが参考になる。
ASP.NET | The ASP.NET Site 公式サイト
さて、ワテは正規表現に関しても、それほど上級者ではない。あまり難しいパターンは書けないし、上級者の人が書いたややこしいパターンをスラスラ理解することもなかなか苦手である。でも世の中には、信じられないようなパターンをスラスラ書ける人もいるようで、ただただ感心するばかりである。
正規表現とは何かというような壮大なテーマを書くには、ワテの知識では到底無理なので、まあ簡単に言えば WindowsのDOSのコマンドでワイルドカード*を使って
dir *.txt
とやれば、
data1.txt
data2.txt
などがヒットするように、文字列を指定する際に*やその他のいろんな記号や文字を使って、検索したい文字列を見つけ出すために記述するマッチングパターンという感じかな。
正規表現で、
data[0-9]\.txt
と書けば、
data0.txt ~ data9.txt
を表現することが出来る。
ちなみに、
[0-9] 0~9までのどれか一つの文字
. ピリオド . 単体だと任意の一文字という意味になるがそう解釈せずに文字通り
ピリオド . を表したい場合には直前にバックスラッシュ を書いてエスケープする
という意味だ。
この正規表現はどういう時に使うかと言うと、いろんな場面が有るのだが主な状況を上げると、
- 何らかのテキストファイルの中から特定のパターンの文字列を含む行だけを取り出したい(検索)
- 何らかのテキストファイルの中から特定のパターンの文字列を含む行だけを取り出し(検索)、かつ書式を変更したい(置換)
まあ1の場合は分かり易い。2は具体的には
〒100-0014 東京都千代田区永田町1-7-1電話(代表)03-3581-5111(衆議院)
100-0014 住所 東京都千代田区永田町1丁目7番1号 電話番号 03-3581-3111(大代表)(参議院)
みたいに住所が記載されているテキストファイルがあったとして、でも住所や電話番号の書式が一定ではない。
これを
〒100-0014 東京都 千代田区 永田町 1-7-1 電話(代表)03-3581-5111 衆議院
のように、
- 数字、記号は全部半角にしたい
- 都道府県名、市区町村名など分離したい
場合に、手作業でやるのは大変である。この例のようにデータが二つだけなら手作業でも行けるが、数万件のデータなどでは手作業では何時間かかるだろう。それに間違いもあるだろうし。
こういう作業を行う場合に役立つのが正規表現だ。もちろん、正規表現は応用範囲が広いので、これはあくまで一つの例であり、ほかにも様々な利用方法がある。
さて、
前置きが長くなったが、先日ワテが作ったオンライン正規表現データ変換 V1.0 の画面はこんな感じです。
使い方は簡単で、
- 左のテキストボックスに処理したいテキストを貼り付ける
- マッチングのための正規表現のパターンを入力欄に入れる
- 置換したい場合は置換処理で使う文字列を入力欄に入れる
- 実行ボタンを押すと結果が右側テキストボックスに表示される
とう流れです。
右側にあるDropDownListには予め便利な正規表現パターンを20種類くらい入れてあるので、その中から選ぶと検索や置換のパターンが自動的にセット出来る。
検索/置換 の項目が二つある理由は、1番目の処理結果に対して2番目の処理を行うことが出来ます。UNIXやLINUXのパイプみたいな感じで処理を実行出来ますので、一回では処理しきれない場合に、2番目のパターンで絞り込むなどが可能です。
それ以外の特徴としては、Sort, Uniqというチェックボックスかな。これもUNIXやLINUXのコマンドと同じ感じの動作をする。つまり処理結果に対して昇順ソートを行ったり、あるいは、重複する行を削除して一つにする処理である。
GrepというのもUNIX, LINUXのコマンドにあるが、ここではちょっと違う意味だがニュアンスは同じ。このオプションは置換処理の場合に使うのだが、通常ならマッチングパターンにマッチした行のそのマッチ部分のみが置換対象になる。マッチしなかった行はそのまま出力される。でも、実際に置換処理を必要とする場面では、マッチしなかった行は取り除きたい場合が多い。なので、このGrepをチェックするとそういう動作をするようにしている。
ICaseはIgnore Caseの略で大文字小文字を区別しない。
ということで、自分ではわりと使い勝手が良いと思っているのだが、皆さん試して頂いて何か改善案など有りましたら教えてください。
コメント