目次
ここでは正規表現事例集と書いていますが、主に検索/置換をコピペでできるようなものを書いています。
エディタを便利に使う上で、検索と置換は非常に重要になってくるため、事例を書いていきます。
ここで上げきれない事例については正規表現を学ぶことで、より詳しく知ることができるので、達人になるために正規表現について勉強することをお勧めします。
本書は、正規表現の検索/置換を試せる「正規表現 簡易チェッカー」を使用し、体験しながら一歩ずつ学んでいきます
正規表現事例集
各行の一番最初にヒットした1文字だけを置換したい
各行にある、一番最初にヒットした1文字だけを置換したい時に利用します。
事例
例えば、以下のような電話帳データがエクセルで管理されていたとします。
名前 | ふりがな | 電話番号 |
---|---|---|
堅田 勝将 | かただ かつまさ | 0123456789 |
森岡 藤助 | もりおか とうすけ | 9809765612 |
隠岐 五藤 | おき ごとう | 3846790182 |
和知 重良 | わち しげよし | 7641098453 |
傑山 尹英 | けつざん ただひで | 2438788912 |
佐治 誠可 | さじ さねよし | 0007882391 |
菱刈 太郎 | ひしかり たろう | 3998712343 |
六角 慶門 | ろっかく のりかど | 8473620012 |
佐野 康長 | さの やすなが | 2906672228 |
黒川 六大夫 | くろかわ ろくだゆう | 2099186532 |
上記は名前メーカーから作りました。
このデータから以下形式のcsvに変更したいという流れです。
堅田 勝将,かただ かつまさ,外線,0123456789 森岡 藤助,もりおか とうすけ,外線,9809765612 隠岐 五藤,おき ごとう,外線,3846790182 和知 重良,わち しげよし,外線,7641098453 傑山 尹英,けつざん ただひで,外線,2438788912 佐治 誠可,さじ さねよし,外線,0007882391 菱刈 太郎,ひしかり たろう,外線,3998712343 六角 慶門,ろっかく のりかど,外線,8473620012 佐野 康長,さの やすなが,外線,2906672228 黒川 六大夫,くろかわ ろくだゆう,外線,2099186532
エクセルからコピーすると、セル間がタブになってしまうのですが、csvではカンマ区切りでないといけないということ、別の情報も別途付与したい(外線/内線)というところ、名前の長さがすべて漢字4文字ではないため、矩形選択できないため、1つ目のタブを置換して入力していくという方法を取ります。
コマンド & 実行結果
最初にヒットしたタブをカンマに置換するコマンドはこちら。
置換前には (^.*?)(\t) を入力します。意味合いとしては、
「行頭から次に指定する文字(\t)までの間の最短の文字」
を表しています。
このコマンドにて、黄色い部分が選択されます。
ここで置換後の指定として $1, を指定しています。意味合いとしては、
「1つ目のグループの後ろの文字を , に置換」
を表しています。
これを実行することで以下結果になります。
続けて、上の画像の通り、外線と登録したいので、外線も一緒に置換後にしてしています。
最後まで処理したものがこちら。
これで最初の期待した表示に変更することができました。
補足
置換後に追加したい文字列に数字が含まれる場合は、${1}01,と{}でくくることで数字を入力できます。
特定の文字列がある行のみ抽出したい
膨大な行数のデータから特定の文字列のみ抽出したいという場合に使える表現です。
事例
コマンド & 実行結果
特定の文字列がある行のみ抽出したい際のコマンドはこちら。
置換前には ^(?!.*xx).*\r\n を入力します。 意味合いとしては、xxというものが含まれている行ではないものが選択されています。
そのため、置換後を空欄にして実行すると、xxが存在する行以外すべてが削除されます。
特定の文字列がある行のみ削除したい
上の事例とは逆の、特定の文字列がある行のみ削除したいケースです。
事例
コマンド & 実行結果
特定の文字列がある行のみ削除したい際のコマンドはこちら。
置換前には ^.*xx.*\r\n を入力します。 意味合いとしては、xxというものが含まれている行を選択しています。
そのため、置換後を空欄にして実行すると、xxが存在する行すべてが削除されます。
連続したスペースを1つのTABに変更したい
複数の連続したスペースが入力されている状態のものを、1つのTABにしたい。
事例
コマンド & 実行結果
コマンドはこちら。
置換前には ( +| +) を入力します。 最初のプラスマークの前には半角スペース、2つ目のプラスマークの前には全角スペースを入力しています。
置換後を\tにして実行すると、1つ~複数のスペースが、1つのタブに置換されます。