wordで正規表現《その1》

正規表現」は英語で「regular expression」と呼んでいます。歴史は1956年に原型ができ、1970年ごろにエディタに組み込まれたとのことです。Unixは1969年にAT&Tのベル研で開発されたそうですから50年以上経っています。そのUnixでのツールとしてsedやgrepなどが開発され、そこに「正規表現」が組み込まれました。

ざっと、50年ほど前にテキストを扱う上で便利だと考えた人たちがアメリカにいて、数学的理論を駆使して考案されているようです。

なぜ、「正規regular)」と「表現(expression」という言葉を使うのかについての説明記事もありましたが「なるほど」とも思えなかったので割愛します。

マイクロソフトがいつから正規表現を取り込んだのかはわかりません。いつもデファクトな標準とは別路線で、マイクロソフトの標準をデファクトにしようとしているので、あまり期待をせずに試してみたら普通に使えたので報告をかねて記事にまとめてみます。

と言っても一般的な正規表現についてダラダラ書いても長くなるだけなので、この記事での正規表現の使い道を限定して説明します。

【実装目標 1】

文中の数字を検索する。
数字1文字は「全角」にする。
数字が2文字以上続く場合は「半角」にする。

Ctrl+H」で検索・置換画面を呼び出して「検索」タブから「オプション」を選び「あいまい検索」のチェックを外します。

次に「特殊文字」から「任意の数字」を選びます。

検索する場所」から「メイン文書」を選ぶと、対象となる数字が全部選ばれます(選ばれた数字が灰色で反転されます)。

この状態で「文字種の変換」ボタンから「全角」をクリックするとすべての数字が全角になります。

数字が全部、全角になりました!

ここからは数字1文字以外を半角にする処理になります。ここで「正規表現」が出てきます。

ここにチェックを入れることで、ワードでは「正規表現」が使えるようになります。

ここで、「検索する文字列」として「[0-9]{2,}」として「検索する場所」で「メイン文書」を選びます。

赤の破線の丸のように1文字の数字は選ばれていません。正規表現の説明を少ししましょう。

[]{2,}

半角の “[” と “]” で囲んだ中に書いてある文字を探すパターンを定義しています。ここでの定義は全角の「」と全角の「」を半角の「-」でつないでいますが、この意味は全角数字の「0から9」のいずれかと一致するものと言う意味です。

後ろにくっついている波括弧の指定は「2文字以上」と言うことになります。カンマで区切ってある2つ目の省略してある部分は最大の桁数を指定することができます。ここでは指定しません。

全角数字にしたのと同じ要領で「文字種の変換」ボタンから「半角」をクリックすると選べれている部分の数字はすべて全角数字になります。

画面の状態によって「文字種の変換」ボタンが押せない状態になっていることもありますが、その場合は、メイン文書をマウスでクリックするとボタンが押せるようになります。

まとめ

マイクロソフトには、マイクロソフトの流儀を標準にしようとする強い意志があります。検索や置換にも独自の文化を強いるところがあって、正規表現を取り込んでいることを知りませんでした。

といっても、相変わらずのローカライズがあるので、あまり深く追求すると正規の正規表現を使うときに混乱する可能性もあります。

とはいえ、正規の正規表現ではできないことができるという魅力もあります。例えば、例のように全角・半角のような書式に関する置換は、ワードのほうが圧倒的に便利ですので、マイクロソフト的正規表現にも、有効性があることを認識しました。

前の記事

「bit」を考えてみる