
この記事では、GoogleスプレッドシートのREGEXEXTRACT関数を使って、テキストから特定の文字列を抽出する方法をご紹介します。特定の文字より前を抽出する方法や、特定の文字以降を抽出する方法についても解説しているので、ぜひ参考にしてみてください。
REGEXEXTRACT関数の使い方
REGEXEXTRACT関数は、正規表現と最初に一致する部分文字列を抽出します。
正規表現とは、あいまいな文字列を検索するための手法の 1 つで、メタキャラクタ(メタ文字)という記号を組み合わせて、文字列のパターンを表現します。
REGEXEXTRACT関数の引数:(テキスト, 正規表現)
特定の文字より前を抽出する方法

特定の文字より前の部分を抽出するには、任意の文字の 0 回以上の繰り返しを表す .* を使用し、特定の文字をその後に記述します。このとき抽出したい部分を キャプチャグループ () で囲むのがポイントです。
例えば、メールアドレスから「@」より前の部分を抽出する場合、REGEXEXTRACT関数は以下のようになります。
=REGEXEXTRACT(メールアドレスが入力されたセル, "(.*)@")
| . | 任意の1文字 |
| * | 直前のパターンの0回以上の繰り返し(最長一致) |
| .* | 0文字以上の任意の文字列(最長一致) |
| ( ) | キャプチャグループ |

この数式を適用すると、以下の結果が得られます。
apple@gmail → apple
orange@gmail → orange
banana@gmail → banana
このように、文字数に関わらず「@」マークより前の部分だけを抽出できます。

特定の文字が複数ある場合は、文字クラス[]を使います。
例えば都道府県(都、道、府、県)のいずれかの文字より前の部分を抽出する場合、REGEXEXTRACT関数は以下のようになります。
=REGEXEXTRACT(住所が入力されたセル,"..+?[都道府県]")
| . | 任意の1文字 |
| + | 直前のパターンの1回以上の繰り返し(最長一致) |
| +? | 直前のパターンの1回以上の繰り返し(最短一致) |
| ..+? | 2文字以上の任意の文字列(最短一致) |
| [ ] | [ ] 内のいずれかの1文字 |

この数式を適用すると、例えば以下のような結果が得られます。
京都府京都市若宮町1-2→京都府東京都八王子市暁町3-4-5→東京都鹿児島県霧島市国分中央6-7→鹿児島県
特定の文字(都、道、府、県)を含めて抽出する場合、キャプチャグループ () は不要です。
特定の文字以降を抽出する方法

特定の文字以降の部分を抽出するには、任意の文字の 0 回以上の繰り返しを表す .* を使用し、特定の文字をその前に記述します。このとき抽出したい部分を キャプチャグループ () で囲むのがポイントです。
例えば、メールアドレスから「@」より後ろの部分を抽出する場合、REGEXEXTRACT関数は以下のようになります。
=REGEXEXTRACT(メールアドレスが入力されたセル, "@(.*)")
| . | 任意の1文字 |
| * | 直前のパターンの0回以上の繰り返し(最長一致) |
| .* | 0文字以上の任意の文字列(最長一致) |
| ( ) | キャプチャグループ |

この数式を適用すると、以下の結果が得られます。
apple@gmail → gmail
orange@gmail → gmail
banana@gmail → gmail
このように、文字数に関わらず「@」マークより後ろの部分だけを抽出できます。

特定の文字が複数ある場合は、文字クラス[]を使います。
例えば都道府県(都、道、府、県)のいずれかの文字より後ろの部分を抽出する場合、REGEXEXTRACT関数は以下のようになります。
=REGEXEXTRACT(住所が入力されたセル, "..+?[都道府県](.*)")
| . | 任意の1文字 |
| + | 直前のパターンの1回以上の繰り返し(最長一致) |
| +? | 直前のパターンの1回以上の繰り返し(最短一致) |
| ..+? | 2文字以上の任意の文字列(最短一致) |
| [ ] | [ ] 内のいずれかの1文字 |
| ( ) | キャプチャグループ |

この数式を適用すると、例えば以下のような結果が得られます。
京都府京都市若宮町1-2→若宮町1-2東京都八王子市暁町3-4-5→八王子市暁町3-4-5鹿児島県霧島市国分中央6-7→霧島市国分中央6-7
キャプチャグループ () を使用するとこで、特定の文字より後ろの部分だけを抽出できます。
特定の文字列を抽出する方法

特定の文字列そのものを抽出したい場合は、抽出したい文字列を () (キャプチャグループ)内に直接記述します。
例えば、テキストのランダムな位置に含まれる「フルーツ」という文字列を抽出する場合、REGEXEXTRACT関数は以下のようになります。
=REGEXEXTRACT(テキストが入力されたセル, "(フルーツ)")
| ( ) | キャプチャグループ |

この数式を適用すると、例えば以下のような結果が得られます。
青森フルーツりんご→フルーツみかん和歌山フルーツ→フルーツフルーツもも岡山→フルーツ
() (キャプチャグループ)で囲むことで、指定した「特定の文字列」だけを抽出できます。

特定の文字が複数ある場合は、OR | を使います。抽出したい複数の文字列を | で区切り、それらを () (キャプチャグループ)で囲みます。
例えばテキストのランダムな位置に含まれる「フルーツ」または「ヤサイ」という文字列を抽出する場合、REGEXEXTRACT関数は以下のようになります。
=REGEXEXTRACT(テキストが入力されたセル, "(フルーツ|ヤサイ)")
| ( ) | キャプチャグループ |
| | | OR(または) |
この数式を使うと、例えば以下の結果が得られます。
青森フルーツりんご→フルーツとれたてヤサイ詰め合わせ→ヤサイフルーツとお花のセット→フルーツ
このように、() と | を組み合わせることで、指定した複数の文字列のいずれかを抽出できます。
特定の文字から特定の文字まで抽出する方法

特定の文字と特定の文字の間の部分を抽出したい場合、 (.*) (キャプチャグループ)の前後に特定の文字を記述します。
例えば、ハイフン - からハイフン -までの文字列を抽出する場合、REGEXEXTRACT関数は以下のようになります。
=REGEXEXTRACT(テキストが入力されたセル, "-(.*)-")
| . | 任意の1文字 |
| * | 直前のパターンの0回以上の繰り返し(最長一致) |
| .* | 0文字以上の任意の文字列(最長一致) |
| ( ) | キャプチャグループ |