• twitter
  • facebook
文学・歴史資料のデジタル加工入門

「正規表現」を使ってデータを加工してみよう 【文学・歴史資料のデジタル加工入門1】(木越 治)

【正規表現を使ってデータを分ける】

ここでいきなり「正規表現」という用語を使ってしまったのでとまどう人がいるだろうが、これは、コンピュータが文字をコードで扱うことに由来するものである。

文字コードについては、下記のサイトがわかりやすい。

Shift_JIS 文字コード表(聖愛高等学院HP)
http://seiai.ed.jp/sys/text/java/shiftjis_table.html

このように、コンピュータで扱う文字にはすべてコードが付されている。このコードは、半角の数字からはじまり、記号・アルファベットと続き(半角の片仮名・記号類もこの表では一応定義されているが、メールで使ったりすると文字化けしたりするから使わない方が安全である)、さらに全角文字へと続いていることがわかるだろう。これを利用すると、数字全部をひとつの集合として表現することができる。それを称して「正規表現」というのである。

かつて、MS-DOS全盛の時代には、この種の「正規表現」を用いた置換作業は、SEDというUNIX系*のツールを用いたものである。Windows XPまでは、Windowsに移植されたこれらのツールがそのまま使えたが、32ビット・64ビットマシンを対象にするWindows 7~Windows 10では、手元にあるこの種のツールは、ことごとく「このOSでは使えません」と拒否されるようになってしまった。

ただし、日ごろ愛用している秀丸エディタ(シェアウェアで、送金番号に96の数字が入っているから、1996年に送金したものであろう。20年くらい使い込んでいることになるが、市販の一太郎などのアプリケーションソフトのようにバージョンアップのたびにお金が必要になることはない。それでいて、新しいOSへの対応も早いから、税込み価格4,320円は安いものだと思う)では可能だったことを思い出し早速やってみた。(なお、秀丸のサイト(http://hide.maruo.co.jp/)によると、最近『秀丸エディタで正規表現を完全マスター!』という本が出たらしい。)

実際の作業としては、

置換前の文字列  ([0-9]+)
置換後の文字列  \1,

 

h2 h3

 

これを実行するだけである。これで、以下のように、出席番号の数字のうしろに「,」がつく。
h4=========================
1,石原 勇次郎
2,山本 小百合
3,蜷川 友一郎
4,基山 隆一
5,春山 さおり
6,神戸 惣一郎
7,根津 幸太
8,綿貫 市朗
9,木島 順平
10,溝口 甫
11,水田 広司
12,水村 里江
=========================

 

この置換文字列の意味を説明しよう。

まず、半角括弧は、秀丸の正規表現においては、文字集合をグループ化する特別の意味を持つ文字(メタ文字という)である。

次に、

 [0-9]

のように半角の[ ]でくくられたのが、キャラクタクラスと呼ばれるもので、文字列の集合を意味する。(高校時代、数学で「集合」を習ったときは、なんでこんなことを勉強しなければならないのかさっぱりわからず、成績も赤点に近かったことを思い出す。微分・積分も同様の理由でなんのためにやるものものなのかよくわからなかった。問題と答えを覚えるという方法でなんとか定期試験は切り抜けたが、全体に数学教育というのは、目的不明のことをやらせすぎていると思いませんか? それはともく、コンピュータと付き合うようになってから、集合という概念はとても重要だし、理解すればはなはだ有用であることに気づいたものである。)さきほどの文字コード表をみてもらうと、半角数字は、

 0123456789

という順で並んでいる。だから、

[0-9]

というのは、

0~9までの半角数字

という集合をあらわすわけである。ここの「-」も特別な意味を持つメタ文字であり、連続する文字集合の最初(0)と最後(9)とをこの「-」でつなぐと、最初の文字から最後の文字までに含まれる全部の文字の集合を対象とすることになる。だから、この文字コード表を見ながらやれば、半角アルファベットの小文字全部は

 [a-z]

となるし、

 [A-Z]

なら、大文字全部である。

 [A-z]

これで、大文字も小文字も全部含むことになる。
漢字は、読みや部首でなくJISコード順なので、あまり使う機会はないが、

[亜-腕]

これが、JIS第一水準の漢字全部。

 [弌-熙]

こちらが、JIS第二水準の漢字全部。

 [亜-熙]

とやれば、JIS第一第二水準の漢字全部になる。次回以降に説明する、この集合に含まれないものを指定する方法を使えば、JIS第一水準にも第二水準にも含まれない漢字を見つけることができる。「今昔文字鏡」の文字を使ったファイルをそのまま印刷所に入稿すると文字化けしてしまうと聞いたことがあるが、そういうのを見つけ出すときには、この方法は利用価値があるだろう。

*UNIX
UNIXというのは、身近なところでいうと、Mac OS 10 以降がこれである。だから、Macのターミナル(Windowsのコマンドプロンプトにあたる)はUNIXである。UNIXが一番多く使われているのはサーバー管理用であろう。ともあれ、このへんは、理系の専門家レベルの話である。ただ、UNIXは、オープンソース、つまり、無償で公開されていて、悪意ある改変をしない限り、自由に改変や配布ができるということと、テキストファイルをの操作(検索・置換・表示形式を変える等)するためのツール類が豊富に含まれているため、MS-DOS時代から、UNIXにあるツールを移植して使うということはよく行なわれていた。