Wordのワイルドカード機能が意外と使えた件

Wordを使っていて、便利そうだけど使えないなぁ~と思っていたのがワイルドカード機能です。検索・置換のときに使うものですが、なかなか思うような検索をしてくれなくてイライラしていました。

しかし、ちょっと研究してみたら、意外と使えるのです。正規表現バリとはいきませんが、そこそこの複雑な検索はこなしてくれます。

その一例を紹介しましょう。

スミカッコで囲まれた部分を全部削除したい

スミカッコとは、【】です。

【あはははは、そんなのないっつーの!】

そんな部分を全部消してしまうには、手動操作では「【」だけを検索して、そこから「】」まで範囲選択して、Deleteキーですかね。

しかし、数が少ないならいいですけど、多いと大変ですよね。ミスも生じやすくなります。

そこで、Wordの置換機能でワイルドカードを有効にして、検索パターンを指定します。

デフォルトでは[あいまい検索]がONになっているので、これをOFFにします。OFFにしないとワイルドカードが使えません。そして[ワイルドカードを使用する]をONにします。

[検索する文字列]欄に、ワイルドカードを含めた文字列を入れます。画面では小さくてわかりにくいので抜粋します。

【[!】]@】

なんでしょうねこれは、これがワイルドカードです。下の[特殊文字]から選んでいきますが、ハッキリ言ってわかりにくいので、手打ちで入力しちゃった方が速いです。

これを分解すると、こんな感じです。

  1. [!】]@

1番目は、スミカッコの開きです。3番目はスミカッコの閉じです。これはわかりますね。では2番目すなわち真ん中はどうでしょう?初見ではわからないですね。

半角の[~]は、文字の集合です。中には!と】が含まれていますが、この場合の!は否定を意味し、すなわち】以外、という意味になります。@は前の文字の繰り返しを意味するので、】以外の文字の繰り返し、となります。

すなわち、【から始まって、】に至るまでの複数の文字を見つけたら、一致!とするわけですね。

[置換後の文字列]欄が空なので、一致したら全部削除ね、ということになるのです。

さて、半角の[~]の中の指定をわざわざ】以外としているのには理由があります。これは、最短一致を明示しています。最短一致とは、もっとも短い部分で一致を試みる検索方法です。幸い、Wordでは最短一致が優先されるようで、任意の文字を意味する?を使って【?@】と指定してもうまくいきます。

まぁ、最短一致がうまくいかない!!という場合のために、このようなややこしい指定方法も覚えておきましょう。ちなみに1行の中に【~】がいくつもある場合、最初の【から始まって最後の】までが一致してしまうのを最長一致と言います。

パーレンで囲まれた英数字からパーレンを取って前にタブを入れたい

ちょっと上級ですね。

こんな感じになります。今度は置換後の文字列も入っています。

かなり複雑ですが、同様に抜粋しましょう。[検索する文字列]です。

\(([0-9a-zA-Z_\.\-]@)\)

円記号がバックスラッシュになっちゃっているかもしれませんが、ここは円記号でお願いします。

同じくこれを分解すると、こんな感じです。

  • \(
  • (
  • [0-9a-zA-Z_\.\-]@
  • )
  • \)

1番目と5番目は、半角パーレンで囲まれた、です。頭に\を付けているのは、半角パーレンが特殊な意味を持つからです。単なる文字として扱って欲しい場合には、頭に\を付けます。これをエスケープと言います。

2番目と4番目は、同じく半角パーレンで囲まれた、となりますが、エスケープされていない場合はグルーピングという機能になります。グルーピングすると、置換後の文字列から参照したり、便利なことができます。

3番目は、すでに見た文字の集合です。ハイフンで文字を結ぶと範囲を指定したことになります。この場合、数字、英子文字、英大文字、すべてになります。そして_(アンダースコア)、ハイフン、ピリオドです。ハイフンとピリオドは、特殊な意味を持つのでエスケープしています。@は前の文字の繰り返しを意味するので、英数字と_.-の繰り返し、となります。

すなわち、(~)で囲まれている英数字と_.-の連なりを見つけたら、一致!とするわけですね。

[置換後の文字列]にある^tはタブ文字です。次の\1が、先ほど書いたグルーピングの参照で、1番目のグルーピングで一致した文字列そのまま、となります。検索時には、何に一致するかわからないのですが、それをそのまま参照できるので、置換後の文字列に活かすことができ、すごく便利です。

まとめ

このように、Wordのワイルドカードは結構使えます。正規表現バリには行かないと書きましたが、行くかも知れません。ただ、正規表現も単純なものはこんな感じですが、かなり複雑な指定もできますから、それはワイルドカードではちょっとムリでしょうね。

コメント