Googleスプレッドシートで使える『REGEXEXTRACT関数』は、文字列から正規表現で指定したパターンを抽出することができる関数です。
文字列を抽出できる関数のなかで、一番複雑な抽出なことができるので、マスターできれば向かうところ敵なしです。数字のみを抽出したり、URLからドメイン部分のみを抽出したり、色々な文字列操作を行うことが出来ます!!
こんにちは。当ブログの管理人の『くろん』です。
30代サラリーマン、新規事業推進室に所属。新卒ブラック企業努め時代に身に着けた業務効率化ノウハウをアウトプットしていきます。
読んでくれた方の業務が一秒でも早く終わりますようにの精神で記事書いてます!!
『REGEXEXTRACT関数』とは?
『REGEXEXTRACT関数』は、正規表現に基づくパターンについて、その文字列で最初に出現した内容を抽出してくれる関数です。
『REGEXEXTRACT関数』他、Googleスプレッドシートで用いることができる正規表現は、『Googleが作ったRE2正規表現エンジン』のことを指します。Google-RE2-Githubページ(英語)
REGEXEXTRACT関数の構文
REGEXEXTRACT(テキスト, 正規表現)
項目 | 内容 |
テキスト | 抽出したい元となる文字列。セル指定でも、直接入力でも可能。直接入力のときは『”』で文字列を囲む必要あり。 |
正規表現 | 抽出したい文字列をパターン化した正規表現。このパターンに一致する最初のテキスト部分が返される。直接入力のときは『”』で文字列を囲む必要あり。 |
REGEXEXTRACT関数を実際に使ってみた
文字を先頭から◯文字抽出する(LEFT関数)
『.』(ピリオド)は任意の文字を表します。先頭から検索かかるので、ピリオド3つは先頭から3文字の意味になります。LEFT関数と同じような抽出ができます。
文字を最後から◯文字抽出する(RIGHT関数)
『$』(ドル)は最後を示し、その直前の正規表現で終わることを示します、なので、最後の3文字となります。
RIGHT関数と同じような抽出ができます。
文字を◯文字目から◯文字抽出する(MID関数)
『()』(半角かっこ)を使用すると、この部分だけを抽出することができます。これを利用すると、文字列の中央部分であっても抽出することができるようになります。MID関数と同じような使い方ができますね。
小文字アルファベットを抽出する
『[ ]』(角かっこ)は、そのカッコ内に文字を列挙できる記号で、『-』(ハイフン)は文字範囲を示すことができます。なので、『[a-z]』は小文字アルファベットのすべてを示すパターンとなります。
また、『+』は直前の文字を1文字以上繰り返すという意味なので、『[a-z]+』は、小文字アルファベットの何文字でもOKの文字列ということになります。
大文字アルファベットを抽出する
正規表現では、小文字と大文字を区別するので、[a-z]と[A-Z]は異なります。
大文字アルファベットを抽出したいときは、『[A-Z]+』とすればOKです。
小文字大文字問わずアルファベットを抽出する
小文字大文字問わずアルファベットを抽出したい場合、2つ方法があります。
一つは、小文字のすべてのアルファベットを意味する『[a-z]』と、大文字のすべてのアルファベットを意味する『[A-Z]』を合体させ、複数文字数でも可能にしたバターン『[a-zA-Z]+』を利用する方法です。
見た目的にわかりやすいので、もっぱらこちらを使うことが多い気がします。
もう一つの方法は、小文字と大文字の区別をしないモードに、フラグを使って切り替える方法です。
『(?i)』と正規表現に加えると、小文字大文字無視するようになります。
知らない方もいらっしゃるので、あまり多様されていない印象です。
半角数字だけを抽出する
先程アルファベットのところで紹介した通り、『[ ]』(角かっこ)は、そのカッコ内の文字を列挙することができる記号で、『-』(ハイフン)は文字範囲を示すことができます。なので、『[0-9]』は0から9のすべての半角数字を示すパターンで、『[0123456789]』と同じパターンを示すことになります。
また、『+』は直前の文字を1以上繰り返すことを示します。なので、『[0-9]+』は、0以上の何桁でもOKの半角数字のパターンを示します。
というわけで、半角数字を抽出することができるというわけです。
ですが、2回以上文字列に半角数字が出現するときは、最初に出現する半角数字しか抽出することができません。
半角数字だけを抽出する(2回出現するときその両方を)
([0-9]+).+([0-9]+)
『()』(かっこ)を用いることで、複数箇所の該当部分を抽出することができます。
先程説明した通り『[0-9]+』は0以上の何桁でもOKの半角数字を示します。
その間には『.+』があります。『.』(ピリオド)は任意の文字列を指し、『+』は直前の文字を1回以上繰り返すということになるので、『.+』は任意の1文字以上の文字列を指します。
つまり、『([0-9]+).+([0-9]+)』は【0以上の何桁でもOKの半角数字】が、【任意の1文字以上の文字列】を隔てて、2回繰り返されているパターンのとき、その数字部分を抽出するように。という内容になります。
なお、上図3行目のように、半角数字が1回しか出現していない文字列の場合、該当するパターンが存在しないので、『#N/A』エラーとなります。
また、4行目のように、3回以上出現する場合は、文頭から2つが抽出されます。
URLからドメインを抽出する(サブドメイン含めて)
://(.+\.[a-z]+)/
URLの文字列から、ドメイン部分のみを抽出したい場合の正規表現となります。サブドメインも合わせて抽出されます。URL文字列のうちドメイン部分は、『://』と、次にでてくる『/』で囲まれている部分を抽出すれば良さそうです。
また、『.com』『.jp』などドメインの終わりは、ドットと半角英字1文字以上の組み合わせで終わるため、それをパターンに組み込むことで、ドメインの終わりを捉えることができます。
ここでポイントとして、文字としての『.』(ドット)を正規表現に組み込む場合、任意の文字を示す『.』(ドット)と区別しなくてはならないので、エスケープ文字である『\』(バックスラッシュ)を直前に付け加える必要があります。
ドメインの終わりを捉えることができたら、その前は任意の文字列で構わないので、『.+』を付け加えます。
そして、ドメイン箇所のみを抽出したいので、該当箇所を『()』(かっこ)で囲えば完成となります。
【REGEXEXTRACT関数】のまとめ
『REGEXEXTRACT関数』は、文字列から正規表現で表したパターン部分を抽出することができる関数です。
使いこなすことができれば、複雑な文字列操作を行うことができるようになるので、ある程度使いこなせるようになっておきたい関数といえます。