正規表現って便利! InDesign作業がグッとラクになる正規表現の使い方2

DTP

はじめに:正規表現を「実務で使ってみた」その次の話

前回の記事では、InDesignの検索・置換で使える正規表現について、「難しいことはさておき、まずは実務で助かる使い方」をまとめました。

 
今回はその続きとして、前回より少し踏み込んだ、先読み・後読み・否定・グループ化といったパターンを整理してみました。
このあたりは難しいので、頭が「???」となることもありますが、少しずつ紐解いていき、「あの場面に使えそう!」というヒラメキに繋がったら嬉しいです。

InDesignで役立つ正規表現:先読み・後読み・否定・グループ化

■ 先読み (?=○○)

特定の文字列の後ろに続く文字が○○である場合だけ検索したい」時に使います。
ただし、先読みでは「確認するだけ」で実際にその文字列を選択はしません。
 

例:TACT(?=SYSTEM)
  → 「TACT」の後ろに「SYSTEM」が続いている場合だけ「TACT」を検索。
結果:「TACTSYSTEM」の中の「TACT」だけが検索対象になります。
 

サンプル1:単位(kg / mm / cm)の直前の数字だけを選択

\d+(?=kg|mm|cm)

仕様表などで「単位はそのまま、数字だけスタイルを変えたい」といった場面に。
 

サンプル2:特定パターンのA1だけを処理したい

A1(?=A1|AB|2C|D3|4E|5F)

「後ろに A1 / AB / 2C / D3 / 4E / 5F のいずれかが続く A1 を見つける」という意味になります。
カタログの品番変更の際、「この組み合わせの最初のA1だけを新品番に変更したい!」という時に役立ちました。
 

 

■ 後読み (?<=○○)

特定の文字列の前に○○がある場合だけ検索したい」時に使います。
ただし、後読みでは「確認するだけ」でその文字列を選択しません。
 

例:(?<=TACT)SYSTEM
  → 「SYSTEM」の前に「TACT」がある場合だけ「SYSTEM」を検索。
結果:「TACTSYSTEM」の中の「SYSTEM」だけが検索対象になります。
 

サンプル1:「¥」の後ろに続く金額だけを選択

(?<=¥)\d+

金額部分だけ文字を大きくしたいなどの場面で便利です。
 

サンプル2:特定コードの前にあるC1だけ拾う(先読み併用)

(?<=02|03|04|05|FK|JN|LS)C1(?=-)

「直前が 02 / 03 / 04 / 05 / FK / JN / LS のいずれかで、かつ直後が「-」の C1 だけを検索」という意味になります。
これもカタログの品番変更の際に、「この組み合わせの途中のC1だけを変更したい!」という時に役立ちました。
 

 

■ 否定 (?!◯◯) / (?<!◯◯)

特定の条件を満たさない場合だけ検索したい」時に使います。
特定の文字列の直前または直後に「指定したパターンがない」場合を確認します。
以下のように考えるとわかりやすいです。
 

・否定先読み (?!◯◯)
後ろに◯◯がない場合だけ検索する
例:TACT(?!Creates)
  → 「TACT」の後ろに「Creates」がない場合だけ検索。
結果:TACTSYSTEM → 一致する / TACTCreates → 一致しない
 

・否定後読み (?<!◯◯)
前に◯◯がない場合だけ検索する
例:(?<!TACT)Creates
  → 「Creates」の前に「TACT」がない場合だけ検索。
結果:HelloCreates → 一致する / TACTCreates → 一致しない
 

サンプル1:特定の文字列を含んでいない行を探す

^(?!.*.eps).*\R

「.epsを含む行だけを残す」という作業をやることがあるので、その時に大活躍。
 

サンプル2:直前が英字ではないmgだけ拾う

(?<![A-Za-z])mg

「5mg」にはマッチしますが、「img」にはマッチしないので、単位としてのmgだけを処理したいときに。
 

 

■ グループ化

複数の部分をまとめて扱いたい」「特定の部分を抽出したい」時に使います。
丸括弧 ( ) を使って、正規表現の一部をグループ化します。
グループ化した部分を後から参照したり、置換時に利用することができます。
 

例:(TACT)(SYSTEM)
  ※ 「TACT」と「SYSTEM」をそれぞれグループ化。
  →$1(グループ1)は TACT / $2(グループ2)は SYSTEM
 

サンプル1:数字と単位の間にスペースを入れる

検索:(\d+)(kg|mm|cm)

置換:$1 $2

置換で$1と$2の間にスペースを入れると、検索でグループ分けしたところにスペースが入ります。
原稿にはスペースが入っていないけど、カタログルールで数字と単位の間にスペースを入れることが決まっている時に便利。
 

サンプル2:改行を含む2行を検索して一部を変更

検索:(グレー\r)((ライト))

置換:$1(ダーク)

1行目が「グレー」、2行目が「(ライト)」という文字列の「(ライト)」を「(ダーク)」に変更するサンプルです。
このように置換すれば、カタログ改訂で色名の一部が変わる時に、改行が入ってても一括で変更できます。

まとめ

正規表現を絶賛勉強中のわたしは、ここまでまとめるだけで息切れです。
特に否定が難しいですね…。
 

しかし、あらためてこうして明文化していたら、ふと気づいたんです。
「この前やったあの案件のあの作業って、これを応用した正規表現でできるんじゃない…?」
 

これこそ、前回自分で言っていた「なんとなく手作業でやっている修正」なような。
実現すれば、単調だけどちょっとだけ手間のかかるあの作業が、とっても効率良くできるようになるはず!
さっそくChatGPTに相談してみましょう。いいヒントをくれる気がします。
 

相談過程や結果は長くなりそうなので、続きは「正規表現って便利! InDesign作業がグッとラクになる正規表現の使い方3」にまとめます。
そちらもぜひご覧ください。