表形式でデータを管理している時、
まとめて入力していたデータを後から分離したいと思うことがあります。
例えば、
田中太郎 <taro_tanaka@mail.com>
のように名前とメールアドレスをまとめてセルに記録していたけど、
後から、名前欄とメールアドレス欄に分けたくなることがあります。
他にも、
田中 太郎
のように、苗字と名前をスペース区切りでセルに記録していたけど、
それぞれを別の説に分けたいということがあるかもしれません。
Google スプレッドシートは、
そんな特定のパターンで文字を抜き出すための関数を用意しています。
ここでは、名前とメールアドレスを分ける操作を例にして、
この文字を抽出する関数の使い方を見ていきましょう。
正規表現
文字列抽出はパターンに従って行います。
そのパターンは正規表現によって記述します。
例えば、
「田中 太郎」という文字列は、
「苗字」+「半角スペース」+「名前」
という構成になっています。
苗字の部分は、「田中」かもしれませんし、
「佐藤」かもしれません。
任意の一文字
正規表現では任意の一文字を「.」ドットで表します。
そのため「..」ドットを二つ並べれば、
任意の二文字を表します。
「..」は「田中」にも「佐藤」にもマッチします。
一文字以上の繰り返し
「..」は任意の二文字ですが、
苗字は「佐々木」のように三文字も場合もあります。
何文字か決まっていない時に便利なのが、
繰り返しにマッチする「+」プラスです。
正規表現で「+」はその前の文字の1回以上の繰り返しを表します。
そのため、「.+」とすれば、任意の文字の1回以上の繰り返しにマッチします。
つまり、「.+」は、「田中」にも「佐藤」にも「佐々木」にもマッチします。
その他の正規表現
他にも「^」行の先頭や「$」行の末尾など、
実に様々な正規表現がありますが、
今回、名前とメールアドレスを分けるためには、
上で紹介した「.」と「+」だけを使います。
こんなパターンが書きたいと思った時に、
使えそうな正規表現を探してみると良いでしょう。
REGEXEXTRACT 関数
Google スプレッドシートで、パターンに従って文字列を抽出する場合は、
REGEXEXTRACT関数を使います。
REGEXは正規表現(REGular EXpression)の略で、
その名前の通り、正規表現で文字列を抽出(EXTRACT)します。
使用方法
関数の引数は2つで、
- 元の文字列
- 抽出するパターン(正規表現)
です。
REGEXEXTRACT("文字列", "パターン")
これで、文字列から正規表現にマッチした文字のみが抽出されます。
文字列にはセルを指定することもできて、
REGEXEXTRACT(A1,"パターン")とすれば、
すでに入力済みのセルA1の中から、
パターンにマッチした文字を抽出します。
抽出部分の指定
REGEXEXTRACT関数では、
パターンにマッチした文字列をそのまま取り出します。
名前とメールアドレスが下のような形式になっている場合、
田中太郎 <taro_tanaka@mail.com>
<
この記号を名前とメールアドレスの区切りに使えそうです。
ということで、「.+<」とすれば、
名前の部分にマッチする正規表現となりそうですが、
この場合、「名前<」にマッチしてしまい、
区切り文字の<
も含んで抽出してしまいます。
これだと少し不恰好なので、
正規表現にマッチさせつつも抽出する部分を選択したいですよね。
その場合は、抽出する部分のパターンをカッコ()
で括ります。
こうすると、マッチした文字列の中で、
カッコに括られた部分だけが抽出されます。
例(名前<メールアドレス>)
それでは実際に、名前とメールアドレスを分離してみます。
名前の抽出
名前にマッチするのは<
記号の手前までなので、
「(.+)<」を正規表現に指定すれば良さそうです。
上では、REGEXEXTRACT関数を使って、
セルA1に入力された文字列から、
名前の部分の抽出を行なっています。
メールアドレスの抽出
メールアドレスはカッコ<>
に括られているので、
「<(,+)>」のパターンにマッチさせれば良いですね。
確かにメールアドレスだけを抜き出すことができています。
複数の部分をまとめて抽出
上では、名前とメールアドレスをそれぞれカッコ()
で指定して、
抽出しましたが、複数の部分を指定するとどうなるのでしょう。
実は、複数の部分を指定すると、
それぞれの部分文字列を列に分けて抽出してくれます。
抽出した結果を格納するセルが連続する列の場合は、
このようにまとめて抽出した方がスマートですね。
まとめ
Google スプレッドシートでパターンに従って、
文字列を抽出する方法について例を混じえてみてきました。
表計算ソフトとして、MicrosoftのExcelが代表的ですが、
Excelには、正規表現を扱う関数が用意されていません。
上で紹介したような便利な機能は、
Google スプレッドシートの一つの強みと言えそうです。