正規表現でテキスト処理

 Photoshopで利用できるJavaScriptは幸いな事に正規表現(正則表現と呼ばれる場合もあります)を使うことができます。正規表現は文字列の検索、置換に威力を発揮するものです。正規表現は奥が深くて、1冊の本になっている事があります。検索エンジンで正規表現で検索して調べてみると良い勉強になるかと思います。
 能書きは、このくらいにして実際に使ってみます。Photoshopの場合、文字列の検索よりも置換する方が役に立ちます(多分)。まず、テキストファイルを読み込んで語尾を「です。」から「だ。」に置き換えるものが以下のスクリプトです。

openFilename = File.openDialog("元のファイルを選択してください");
openFile = new File(openFilename);
saveFilename = File.saveDialog("保存ファイル名を入力してください");
saveFile = new File(saveFilename);
flag = openFile.open("r","","");
if (flag)
{
text = openFile.read();
text = text.replace(/です。/g,"だ。");
flag = saveFile.open("w","","");
if (flag) saveFile.write(text);
}

 以下の一行の「です。」「だ。」の「です。」が元の文字列、「だ。」が置換後の文字列になります。

text = text.replace(/です。/g,"だ。");

 この2カ所の文字を変えると、いろいろな文字を置換することができます。置き換えたい文字がたくさんある場合には、上の行をどんどん並べます。以下のサンプルは句読点を「。、」から「.,」に置き換えるものです。

openFilename = File.openDialog("元のファイルを選択してください");
openFile = new File(openFilename);
saveFilename = File.saveDialog("保存ファイル名を入力してください");
saveFile = new File(saveFilename);
flag = openFile.open("r","","");
if (flag)
{
text = openFile.read();
text = text.replace(/。/g,".");
text = text.replace(/、/g,",");
flag = saveFile.open("w","","");
if (flag) saveFile.write(text);
}

 テキストファイル内の半角スペースが2個以上ある場合には全角の空白1個に置き換えるものが以下のスクリプトです。実質的に正規表現の一行しか変わっていません。

openFilename = File.openDialog("元のファイルを選択してください");
openFile = new File(openFilename);
saveFilename = File.saveDialog("保存ファイル名を入力してください");
saveFile = new File(saveFilename);
flag = openFile.open("r","","");
if (flag)
{
text = openFile.read();
text = text.replace(/x20{2,}/g," ");
flag = saveFile.open("w","","");
if (flag) saveFile.write(text);
}

 ついでに全角空白が2個以上ある場合は、「text = text.replace(/x20{2,}/g," ");」の行の次に以下の一行を入れます。

text = text.replace(/ +/g," ");

 エクセルのセルのデータを連結(結合)したい場合にも利用できます。例えば

県 市 番地 マンション名

 と住所データが何十行、何百行もある場合に「県 市 番地 マンション名」を連結して1つの文字列にしたいとします。まず、エクセルでタブ区切りテキストとして書き出します。後は以下のスクリプトを実行すると連結したファイルができあがります。

openFilename = File.openDialog("tab separate Text File");
openFile = new File(openFilename);
saveFilename = File.saveDialog("Save Filename");
saveFile = new File(saveFilename);
flag = openFile.open("r","","");
if (flag)
{
text = openFile.read();
text = text.replace(/t/g,"");
flag = saveFile.open("w","","");
if (flag) saveFile.write(text);
}

 tはタブコードを示します。これを""、つまり消してしまうので、それぞれの文字が連結されることになります。工夫すると、先頭のいくつかのセルだけ連結して、他は連結しないという事もできます。が、まあエクセルでの事はエクセル内で処理するのが正統かなとは思います。
 保存されたファイルはバージョンによって異なるので、その点だけ注意が必要です。あと、Photoshop CSの場合には上記サンプルを動作させるためには文字コードをUTF-8にして保存してください。
 Photoshop CS以外でもInDesign CSなどでも動作しますので、試してみてください。




[サンプルをダウンロード]