【ワイルドカード】数字列から任意の桁数を抜いて、別形式の番号体系に置換する。

決められた番号体系に基づいて付与された管理番号の一部を、他の番号体系へ転記して、新たな番号を作らなくてはならない・・・というようなことが、事務処理の中ではよく発生します。

例として、以下のようなものを想定してみましょう。

例)Aから始まる9桁の番号があり、うしろ8桁の数字部を抜き出し、抜き出した数字部の後にUS01を付与して、新しい番号を作成して置き換える。

A12345678  →  12345678US01

ワードの置換機能を使い、「ワイルドカードを使用する」をONにして、以下の記述を行います。

検索する文字列

<A([0-9]{8})

置換後の文字列

\1US01

検索する文字列は、Aから始まり、続いて8桁の数字を持ったものを検索するように記述してあり、その8桁の数字は()で閉じることで\1へ代入されます。置換後の文字列の\1にその8桁の数字が展開され、その後にUS01が付与されることになります。

数字の3桁位取りを自動化する

先日行ったWildLight中級セミナーで、受講していただいた方から以下のようなお題をいただきました。もちろん、セミナーではこれを題材にワイルドカードとWildLight特殊コマンドの実習を行いました。うまく解決できたお題ですので、当ブログでシェアいたします。

4桁以上の数字を自動的にカンマで位取りしたい

まず考えたいのは、対象となる数字の桁数です。4桁以上は確かですが、最大何桁までを対象と考えるかです。

X,XXX 〜 XXX,XXX,XXX,XXX

まぁ「兆」くらいをカバーしておけば実用的でしょうか?(笑) すると対応しなくてはならない組合せは以下の3通りということになります。

XXX,XXX
XXX,XXX,XXX
XXX,XXX,XXX,XXX

ワイルドカードで実現する上で、数字の桁数によって処理を変えるというのは、記述が難しそうですので、まずは、末尾三桁(下の例だと012)とそれ以前(123456789)を分けてヒットさせる方法を考えました。

123456789012

[0-9]@[0-9]{3}>

このワイルドカードの記述により、末尾三桁を[0-9]{3}> でヒットさせ、それ以前を [0-9]@ でヒットさせられます。それぞれを置換時に利用するために ( ) で括り、そして、それらの間に位取りのカンマ「,」を挿入するために、置換語に「¥1,¥2」と記述すれば良いことになります。WildLight辞書へは以下のように記述します。(※(TAB)は実際にタブキーを押して入力してください)

WILDCARD:ON
([0-9]@)([0-9]{3})>(TAB)¥1,¥2

この辞書を実行すると、4桁以上の数字は、以下のようになるはずです。

123,456
123456,789
123456789,012

さて、さらに上位の桁の位取りはどうしたらいいでしょう?
そうです。このワイルドカードを繰り返して実行すればいいのです。

ただし、ここで注意しなければならないのは、WildLightに以下の基本機能があることです。

  1. 検索した結果には、必ず蛍光ペンが付く。
  2. 蛍光ペンのない箇所が検索対象となる。

上記のワイルドカードを実行したことにより、数字にはすべて蛍光ペンがついている状態になっています。つまり、そのまま続けて実行したのでは、それらの数字は検索対象から除外されてしまい、位取りがされません。そこで利用するのが、検索時の蛍光ペンの有無を無視するコマンド「IgnoreH」です。

IgnoreH:ON で、検索時に蛍光ペンの有無を無視します(すべてを検索対象として検索する)。ちなみに IgnoreH:OFF でデフォルト値に戻り、基本機能通り、蛍光ペン箇所は検索対象から除外されます。では、これを使って辞書を記述してみると以下の通りになります。

WILDCARD:ON
([0-9]@)([0-9]{3})>(TAB)¥1,¥2
IgnoreH:ON
([0-9]@)([0-9]{3})>(TAB)¥1,¥2
([0-9]@)([0-9]{3})>(TAB)¥1,¥2

これで、兆までの数字に対して3桁位取りが自動で行われ、蛍光ペンがつきます。

この辞書は、ライブラリーに「WLDIC_変換_4桁以上の数値をカンマで自動的に位取り.txt」という名前で登録してありますので、ダウンロードしてご利用ください。

WildLightは、ワイルドカードの1文では表現しきれない処理も、辞書に記述を並べることで処理を可能にできるところが、大きな特長です。

SFAオープンスクールの質問から

昨日、2月28日(土)はサン・フレアアカデミーのオープンスクールでした。

クラスの中でWildLightの使い方に関する質問がありました。これは他の皆さんも利用できる情報ですので、ここにシェアしておきます。

1. 蛍光ペンのついた文字列をワードやエクセルへ抜き出せるか?

WildLight特殊コマンドの「ExtractH2Word」もしくは「ExtractH2Excel」を使います。

例)
ExtractH2Excel

いずれかのコマンドを1行記述した辞書ファイルを準備し、蛍光ペンされたテキストを抜き出したいワード文書へ適用すれば、抜き出せます。

この例を記述した辞書を「WLDIC_抽出_蛍光ペン部をExcelへ抜く.txt」として作成しておきました。ライブラリーからダウンロードしてご利用下さい。

2. PDFファイルからワードにしたものを整形するには、どうしたらいいか?

 この質問については明確な回答ができませんでした。PDFからワードファイルを起こした場合、使用したアプリケーションや原稿PDFの中身によって、出る症状が違うからです。

  • 私の経験した症状として、以下のようなものがあります。
    1. 全角文字間に全半角スペースが紛れ込んでいる。
    2. 全半角数字の後ろに複数の半角スペースが入っている。
    3. 半角英数字間のスペースに全角スペースが入っている。
    4. 文頭に不要なスペースが入っている。

これらへの対処として、以下のような処理を行っています。

' 全角英文字カタカナ漢字の間に挟まった全半角スペースを除去する
 
 ([a-zA-Zァ-ヾ一-鶴ぁ-ゞ])[  ]{1,}([a-zA-Zァ-ヾ一-鶴ぁ-ゞ])     \1\2
' 全半角数字の後のスペースを半角スペース1つにする

 ([0-90-9])[  ]{2,}     \1
' 半角英数字間のスペースを半角スペース1つにする

 ([\!-~])[  ]{1,}([\!-~])     \1 \2
' 文頭の不要なスペースを削除する

 ^13[  ]{1,}     ^p

上記4例とも、[ ]の中は全角スペース1つと半角スペース1つが入っています。
また、セパレーターはTABです。
これらが記述された辞書は、「WLDIC_編集_日本語:PDF抽出文書の成形.txt」として提供しています。

3. エクセルやパワーポイントファイルからテキスト抽出するには、どうしたらいいか?

Microsoft Office Personal以外(Excel, PowerPointが入っているもの)をお使いの方は、WildLight Users Group でのみ配布されている Full バージョンを使えば、エクセルやパワーポイントからテキスト抽出する機能を利用できます。

4. 全角文字の間にまぎれた半角スペースを除去する方法は?

全角文字の間に半角スペースが入っているケースは、PDFファイルからワードへ変換した時に良く見かけるので、質問2への対処の1つとしても有効だと思います。

全角文字をワイルドカードで表現すると以下のようになります。

 、-鶴

そして、全角文字に挟まれる半角スペースを検出して削除するには、辞書に次のように記述します。

 ([、-鶴])[ ]([、-鶴])                  \1\2

[ ]の間には半角スペースを入れます。
([、-鶴]) ([、-鶴])と\1\2の間はセパレーターのTABです。

この辞書を「WLDIC_変換_全角文字間の半角スペースを除去.txt」として作成しておきました。ライブラリーからダウンロードしてご利用下さい。