正規表現で文字列のある部分だけ置換を行い、他の部分は変更しない場合は「部分置換」使用します。今回は、部分置換の方法について説明します。
部分置換を適用する場合
ところで、なぜ通常の置換ではなく部分置換が必要になるのでしょうか。たとえば、携帯電話の先頭3桁を090から080に置換する場合を考えてみましょう。
番号の途中や末尾に090が含まれている数字の場合、単純に090から080へ置換を行うと置換したい場所以外の文字列も変更されてしまいます。このようなときに部分置換を使うことで、指定した箇所だけ置換を行うことができます。
部分置換を使った例
正規表現の中で()で括られた部分はグループ化することができます。そしてグループにマッチした部分を置換時に参照することにより部分置換を行います。
以下のようなデータの電話番号を090から080に置換してみます。
置換前
1 2 3 4 5 6 |
社員番号,電話番号 0901,090-0000-1111 0902,090-1111-2222 0903,090-2222-3333 0904,090-3333-4444 0905,090-5555-6666 |
検索パターンと置換文字列を以下のように設定して置換します。
検索パターン:090-(\d{4}-\d{4})
置換文字列:080-$1
上のように設定した後、置換すると以下のようになります。
置換後
1 2 3 4 5 6 |
社員番号,電話番号 0901, 080-0000-1111 0902 080-1111-2222 0903, 080-2222-3333 0904, 080-3333-4444 0905, 080-5555-6666 |
置換後のように社員番号は変更せずに、電話番号だけ置換することができました。
検索文字列で () で括った部分は置換後も変更が行われません。また、置換文字列の $1 で検索文字列の () を参照しています。このように部分置換を用いることで正規表現にマッチした文字列だけ置換を行うことができます。
テキストエディタで部分置換を行う場合
テキストエディタの置換を行う画面で検索用入力フォームに検索文字列を、置換用入力フォームに置換文字列を入力して置換を行ってください。※正規表現を使用する設定が必要な場合もあります。
まとめ
検索条件が複数あり、() で括られたグループが多くなった場合も $1, $2, $3 ... にように$で始まる参照用変数を増やしていくことで対応できます。また、こちらのサイトで部分置換を試すことができるので、ぜひ活用してみてください。