クイックノート

ちょっとした発見・アイデアから知識の発掘を

【Google スプレッドシート】パターンに従って文字列を抽出する

表形式でデータを管理している時、
まとめて入力していたデータを後から分離したいと思うことがあります。

例えば、
田中太郎 <taro_tanaka@mail.com>
のように名前とメールアドレスをまとめてセルに記録していたけど、
後から、名前欄とメールアドレス欄に分けたくなることがあります。

他にも、
田中 太郎
のように、苗字と名前をスペース区切りでセルに記録していたけど、
それぞれを別の説に分けたいということがあるかもしれません。

Google スプレッドシートは、
そんな特定のパターンで文字を抜き出すための関数を用意しています。

ここでは、名前とメールアドレスを分ける操作を例にして、
この文字を抽出する関数の使い方を見ていきましょう。

正規表現

文字列抽出はパターンに従って行います。
そのパターンは正規表現によって記述します。

例えば、
「田中 太郎」という文字列は、
「苗字」+「半角スペース」+「名前」
という構成になっています。

苗字の部分は、「田中」かもしれませんし、
「佐藤」かもしれません。

任意の一文字

正規表現では任意の一文字を「.」ドットで表します。

そのため「..」ドットを二つ並べれば、
任意の二文字を表します。

「..」は「田中」にも「佐藤」にもマッチします。

一文字以上の繰り返し

「..」は任意の二文字ですが、
苗字は「佐々木」のように三文字も場合もあります。

何文字か決まっていない時に便利なのが、
繰り返しにマッチする「+」プラスです。

正規表現「+」はその前の文字の1回以上の繰り返しを表します。

そのため、「.+」とすれば、任意の文字の1回以上の繰り返しにマッチします。

つまり、「.+」は、「田中」にも「佐藤」にも「佐々木」にもマッチします。

その他の正規表現

他にも「^」行の先頭や「$」行の末尾など、
実に様々な正規表現がありますが、
今回、名前とメールアドレスを分けるためには、
上で紹介した「.」と「+」だけを使います。

こんなパターンが書きたいと思った時に、
使えそうな正規表現を探してみると良いでしょう。

REGEXEXTRACT 関数

Google スプレッドシートで、パターンに従って文字列を抽出する場合は、
REGEXEXTRACT関数を使います。

REGEX正規表現(REGular EXpression)の略で、
その名前の通り、正規表現で文字列を抽出(EXTRACT)します。

使用方法

関数の引数は2つで、

です。

REGEXEXTRACT("文字列", "パターン")

これで、文字列から正規表現にマッチした文字のみが抽出されます。

文字列にはセルを指定することもできて、
REGEXEXTRACT(A1,"パターン")とすれば、
すでに入力済みのセルA1の中から、
パターンにマッチした文字を抽出します。

抽出部分の指定

REGEXEXTRACT関数では、
パターンにマッチした文字列をそのまま取り出します。

名前とメールアドレスが下のような形式になっている場合、
田中太郎 <taro_tanaka@mail.com>
<この記号を名前とメールアドレスの区切りに使えそうです。

ということで、「.+<」とすれば、
名前の部分にマッチする正規表現となりそうですが、
この場合、「名前<」にマッチしてしまい、
区切り文字の<も含んで抽出してしまいます。

これだと少し不恰好なので、
正規表現にマッチさせつつも抽出する部分を選択したいですよね。

その場合は、抽出する部分のパターンをカッコ()で括ります

こうすると、マッチした文字列の中で、
カッコに括られた部分だけが抽出されます。

例(名前<メールアドレス>)

それでは実際に、名前とメールアドレスを分離してみます。

名前の抽出

名前にマッチするのは<記号の手前までなので、
「(.+)<」を正規表現に指定すれば良さそうです。

f:id:u874072e:20190619163142p:plain
REGEXEXTRACTを使った名前の抽出

上では、REGEXEXTRACT関数を使って、
セルA1に入力された文字列から、
名前の部分の抽出を行なっています。

メールアドレスの抽出

メールアドレスはカッコ<>に括られているので、
「<(,+)>」のパターンにマッチさせれば良いですね。

f:id:u874072e:20190619163436p:plain
REGEXEXTRACTを使ったメールアドレスの抽出

確かにメールアドレスだけを抜き出すことができています。

複数の部分をまとめて抽出

上では、名前とメールアドレスをそれぞれカッコ()で指定して、
抽出しましたが、複数の部分を指定するとどうなるのでしょう。

f:id:u874072e:20190619163629p:plain
REGEXEXTRACTを使った複数文字列の抽出

実は、複数の部分を指定すると、
それぞれの部分文字列を列に分けて抽出
してくれます。

抽出した結果を格納するセルが連続する列の場合は、
このようにまとめて抽出した方がスマートですね。

まとめ

Google スプレッドシートでパターンに従って、
文字列を抽出する方法について例を混じえてみてきました。

表計算ソフトとして、MicrosoftExcelが代表的ですが、
Excelには、正規表現を扱う関数が用意されていません。

上で紹介したような便利な機能は、
Google スプレッドシートの一つの強みと言えそうです。

プライバシーポリシー