スプレッドシートで正規表現を使って抽出・置換する



スプレッドシートで文字列を正規表現を使用して置換する機会がありましたので、自分用にメモしておきます。

やったこと

今回はWordpressのマルチサイト化に際し、301のリダイレクトを.htaccessではなくてプラグインで行うためのインポート用新URLリストを作成しました。
既存のURLのリストをエクスポートして、スプレッドシート上でURLを一括変更するという流れで、ビフォーアフターはこんな感じです↓

Before
https://miyadir.com/356/

After
https://miyadir.com/herowars/356/

数十〜数千データがあるリストでこれを一括変換する感じです。
wordpress関連じゃなくても、エクセス・スプレッドシートでの日常的なデータ管理で効率的に仕事ができるようになるテクニックですので、覚えておいて損はないと思います。

正規表現って何よ

正規表現を知らない方向けに簡単に説明すると、「あるパターンに一致した文字や数値を抽出する」という手法です。
普通にC+Fでスプレッドシート内を検索すれば「https://abc.com/」という抽出は可能ですが、「https://abc.com/356/」というリストの中にある個別の記事IDを抜き出すことができません。『「https://abc.com/356/」の中のhttps://abc.com/」と末の「/」に挟まれている数値』というパターンに一致する「356」という個別IDを置換時に使用したい場合は、正規表現を使用する必要があります。
手動でやればいいじゃんと思われるかもしれませんが、リストの数が100や1000を超える場合は手動だと発狂しそうになりますし、ミスも出ますので正規表現で置換するのをおすすめします。

とはいえ正規表現はめちゃくちゃ奥が深いし、慣れていないと頭がこんがらがってしまいますので、慣れていない人はこの記事の手順で置換していくだけでOKです。
もう少し詳しく知りたい初学方の方は以下のような本を読むと良いと思います。

具体的なやり方

検索・置換するデータの準備

まず検索・置換したいデータを用意します。
スプレッドシートで正規表現置換1
置換したいデータの隣に、同じデータをコピーしましょう。このデータを置換していきます。これは何かあった場合に元データを触らないためですので、別にデータを保存してある場合は元データを直接弄ってしまってもかまいません。(とは言え正規表現による置換を一度もしたことがない方が元データをいじるのはおすすめできません。元データと比較しながらできているかを確認していくと良いと思います)

検索フォームの準備

Ctrl+Fで検索フォームを出します。Macの場合はcommand+Fです。
デフォルトだと検索するだけですので、「その他のオプション」から高度な検索機能を使用できるようにしましょう。

「検索と置換」というものが出てきました。「正規表現を使用した検索」にチェックを入れます。

正規表現にチェックを入れると、「大文字と小文字の区別」というチェックが自動的に入ります。英字で大文字と小文字を区別しなくて良い場合はチェックを外します。
関数の中も置換するのであれば「数式内も検索」にチェックを入れてください。

パターン(.*?)で検索、置換する

では実際に検索し、置換していきましょう。

https://miyadir.com/356/
今回は上記の文字列の真ん中に/herowars/を差し込みます。

まず正規表現の(.*?)パターンで、真ん中の数「https://miyadir.com/【ここの数字】/」を抜き出しましょう。
検索欄:
https://miyadir.com/(.*?)/

で検索をかけると、きちんと「https://miyadir.com/XXX/」がヒットしているのがわかると思います。

検索した(.*?)パターンは、「 $1 」で置換時に使用できます。
「検索の範囲」をAfterの置いてあるB列にしぼり、
置換後の文字列:
https://miyadir.com/herowars/$1/

で置き換えてあげればOKです。(クリックで拡大)

「すべて置換」を押せば、全部置換されます。

ちなみに$は複数個使えますので、例えば以下のようなことも可能です。
前の(.*?)から順番に$1、$2のような感じで使っていきます。(クリックで拡大)