文書内のすべての「おながいします」を「おねがいします」に変更するなど、文書に対して用語をチェックし正しい用語に変更するような操作を行うことってありますね。間違いを1つ1つ手で修正すると、修正ミスが発生することもありますし、当然時間もかかります。
RegexpReplace関数を使用すると、正規表現と一致する文字列を簡単に置換することができます。この記事ではその使用方法を紹介します。
文字列を置換する
タイポの修正や大文字小文字の修正など単純な修正を行う場合、RegexpReplace関数を使用すると簡単にできます。ここでは、「おながいします」を「おねがいします」に置換する例で文字列を検索し置換する基本的な方法を紹介します。
まず、正規表現ダイアログで正規表現パターンを作成してテストします。正規表現ダイアログを開くにはRegexpReplace関数をダブルクリックします。そして、「正規表現」ボックスに、置換したい文字列"おながいします"を入力します。
正規表現ダイアログの左下にあるその他のプロパティセクションにある、「置換文字列」プロパティに置換文字列を入力します。今回は"おねがいします"と入力します。
RegexpReplace関数の実行結果を確認するために、「入力文字列」ボックスに誤字が含まれるテスト文字列を入力します。今回は"よろしくおながいします"と入力します。
テストをクリックします。すると、「実行結果」ボックスに"よろしくおねがいします"と表示されました。
思った通りに置換できましたね。
正規表現パターンを使う
タイポを修正するには、単純な文字列の置換だけだと限界があります。例えば英単語の大文字小文字違いは1つの英単語にもバリエーションがたくさんありますね。SampleだったりsampleだったりSAMPLEだったりと。こんな時は、正規表現を使うと簡単にこれらのバリエーションを網羅できます。それでは試してみましょう。正規表現ダイアログの「正規表現」ボックスに次のパターンを入力します。
[sS][aA][mM][pP][lL][eE]
パターン "[sS]" は小文字のsと大文字のSに一致します。それ以外のパターンもSと同様の意味のパターンです。つまり、sampleのいずれの文字が大文字であっても小文字であってもこのパターンにマッチします。
置き換える文字列は"Sample"としてみましょう。「置換文字列」プロパティに"Sample"と入力し、「入力文字列」ボックスに"sample"や"SAMPLE", "SaMpLe"を入力してテストしてみると、RegexpReplace関数はこれらのタイポをすべて"Sample"に置換してくれます。
グループを使用して文字列を再フォーマットする
正規表現でマッチした部分を置換文字列でも使用したい場合、後で使用したい部分のパターンを括弧で囲み、パターンの一部をグループ化します。すると、そのグループにマッチする部分文字列を置換文字列で使用することができます。
グループを使用すると、文字列の中の部分の順序変更を簡単に行うことができます。 例えば、英語圏の人名の「Doe, Jane」というカンマ区切りの名前の表記を、カンマなしの名前の表記である「Jane Doe」に置換します。「Doe, Jane」のような文字列にマッチさせるために、次のパターンを「正規表現」プロパティに設定します。
([a-zA-Z]+), ([a-zA-Z]+)
この正規表現は、「アルファベット1文字以上の名前+カンマ+アルファベット1文字以上の名前」にマッチします。
パターンをよく見ると、括弧で指定された2つのグループがあることがわかります。最初のグループはカンマの前の名前である「Doe」に、2つ目のグループはカンマの後の名前である「Jane」にマッチします。
後は、1つ目のグループと2つ目のグループの順番を入れ替えてカンマを削除するだけです。これはどのようにすれば良いでしょうか?
実は、置換文字列に指定する文字列中には、1つ目のグループを"$1"、2つ目のグループを"$2"と記述することができます。名前の順番を入れ替えてカンマも削除したいので、"$2 $1"と指定します。それでは、テストして実行結果を確認してみましょう。
「実行結果」に"Jane Doe"と出力されました。思った通りの結果になりましたね。
これらの方法を使えば、大文字小文字を揃えたり、語順を入れ替えたり、文章のフォーマットの修正がRegexpReplace関数を使って簡単にできますね。
詳細な設定について
RegexpReplace関数では大文字小文字の区別、メタ文字の使用の有無などを指定することで関数の動作を変更することができます。
置換対象を1度にすべて置換する
「置換対象」プロパティを"すべて"に設定すると、最初にマッチした文字列だけでなく、入力文字列内のマッチするすべての文字列を置換します。
例えば、"よろしくおながいします。次回もおながいします。"のような入力文字列に対して1回の実行ですべての誤字を修正できます。
大文字小文字を区別しない
「大文字小文字の区別」プロパティを"区別しない"に設定すると、大文字小文字の違いを無視します。
例えば、上記で大文字小文字を揃えるために使用した [sS][aA][mM][pP][lL][eE] という正規表現がありましたが、これも「大文字小文字の区別」プロパティを使用すれば簡単です。
「大文字小文字の区別」プロパティを"区別しない"に設定しているので、入力文字列が"Sample"でも"SAMPLE"でもマッチします。
改行やタブ文字を使用する
置換文字列の中で改行やタブ文字を使用したい場合は、「メタ文字を使用」プロパティを"はい"に設定します。
例えば、「Sport Helmet,Blue」のような入力文字列のカンマを改行に置換するには次のように設定します。
置換文字列としては「$1\n$2」を指定します。この中の$1と$2は正規表現の中のグループを表す記号です。グループの間にある「\n」は改行文字を表します。
入力文字列に「Sport Helmet,Blue」を指定して実行してみると次のような結果になります。
Sport Helmet
Blue
ちゃんとカンマが改行に置換されて2行になりましたね。
ただ、ダイアログの「実行結果」ボックスには「Sport Helmet\nBlue」と表示されます。
あくまでもこれは表示上の問題です。実際のRegexpReplace関数の出力には改行文字が含まれていますので安心してください。それから、改行以外にもタブ文字を使用したい場合は、置換文字列の中に「\t」と記述します。
その他のガイド
RegexpMatch関数ガイドでは、以下の正規表現ダイアログの設定方法を紹介しています。
- 大文字小文字のマッチング
- サンプルパターンの使用
- パターンの動的な設定