- クラウドサービス
スプレッドシート正規表現関数の使い方|REGEXEXTRACT例一覧
Google スプレッドシートで正規表現を使う関数は、取り出す REGEXEXTRACT、置き換える REGEXREPLACE、調べる REGEXMATCH の3つです。 「数字だけ抽出したい」なら =REGEXREPLACE(A1,"[^0-9]","")、「最初の数字のかたまりだけ」なら =REGEXEXTRACT(A1,"[0-9]+") と書きます。
この記事は、シートの数式に絞った一覧です。目的別の数式30本をコピーして貼れる形で載せ、スプレッドシートの正規表現(RE2)で使えない書き方と代わりの数式、数値のセルで止まるときの直し方、キャプチャグループが横に広がる動きまでを整理します。
確認環境(2026-10-05):関数の構文と注意点は、Google ドキュメント エディタ ヘルプの各関数のページの記載に沿っています。表の「結果」は、同じ正規表現を RE2 ライブラリ(Python 3.11.15 の google-re2 1.1.20251105)で実行して得た値です。スプレッドシートが使う正規表現も RE2 です(ヘルプの記載)。
この記事の結論
- 数字だけ抽出:
=REGEXREPLACE(A1,"[^0-9]","")(数字以外をすべて消す) - 最初の1件だけ:
=REGEXEXTRACT(A1,"[0-9]+")(最初に一致した部分を返す) - 含むかどうか:
=REGEXMATCH(A1,"[0-9]")(TRUE か FALSE を返す) - 数値や日付のセルは
TO_TEXT(A1)で包む。 3つの関数はテキストだけを受け取ります。 - 先読み・後読み・後方参照は使えません。 代わりに、かっこ(キャプチャグループ)で「欲しい部分だけ」を囲みます。
正規表現関数3つの早見表
| 関数 | 構文 | 返すもの | 向いている場面 |
|---|---|---|---|
| REGEXEXTRACT | REGEXEXTRACT(テキスト, 正規表現) |
正規表現に一致する最初の部分(テキスト) | 文中から1か所を取り出す |
| REGEXREPLACE | REGEXREPLACE(テキスト, 正規表現, 置換) |
一致した部分をすべて置き換えたテキスト | 不要な文字を消す、別の文字にそろえる |
| REGEXMATCH | REGEXMATCH(テキスト, 正規表現) |
一致する部分があるかどうか | 条件に合う行に印を付ける、IF や FILTER の条件にする |
3つに共通する決まりは次のとおりです(いずれもヘルプの記載)。
| 決まり | 内容 |
|---|---|
| 正規表現の種類 | RE2。スプレッドシートでは、Unicode 文字クラスのマッチング以外の RE2 が使える |
| 入力と出力 | テキストだけを受け取り、テキストを返す |
| 数値を入力にしたいとき | TEXT 関数などでテキストに変換してから渡す |
| 結果を数値として使いたいとき | VALUE 関数で数値に変換する |
| REGEXEXTRACT のかっこ | キャプチャグループを使うと、複数の結果を返せる |
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「スプレッドシート正規表現関数の使い方|REGEXEXTRACT例一覧」
目的別の数式30本(コピーして使える早見表)
A2 セルに元の文字列がある前提の数式です。「□」は全角の空白を表します。
| No | やりたいこと | 数式 | A2 の例 | 結果 |
|---|---|---|---|---|
| 1 | 数字だけを残す(数字だけ抽出) | =REGEXREPLACE(A2,"[^0-9]","") |
注文No.A-1024(3個) | 10243 |
| 2 | 最初の数字のかたまりを取り出す | =REGEXEXTRACT(A2,"[0-9]+") |
注文No.A-1024(3個) | 1024 |
| 3 | 最後の数字のかたまりを取り出す | =REGEXEXTRACT(A2,"([0-9]+)[^0-9]*$") |
注文No.A-1024(3個) | 3 |
| 4 | 小数・マイナスつきの数を数値として取り出す | =VALUE(REGEXEXTRACT(A2,"-?[0-9]+(?:\.[0-9]+)?")) |
気温 -3.5 度 | -3.5 |
| 5 | 桁区切りや単位を外して数値にする | =VALUE(REGEXREPLACE(A2,"[^0-9.-]","")) |
12,800円(送料込み) | 12800 |
| 6 | 数字をすべて削除する | =REGEXREPLACE(A2,"[0-9]","") |
会議室A-102 | 会議室A- |
| 7 | 数字を含むかを調べる | =REGEXMATCH(A2,"[0-9]") |
備品B棟3階 | TRUE |
| 8 | 数字だけでできているかを調べる | =REGEXMATCH(TO_TEXT(A2),"^[0-9]+$") |
00123 | TRUE |
| 9 | 英字だけを残す | =REGEXREPLACE(A2,"[^A-Za-z]","") |
型番 XR-200a(新) | XRa |
| 10 | 英数字以外を削除する | =REGEXREPLACE(A2,"[^0-9A-Za-z]","") |
型番 XR-200a(新) | XR200a |
| 11 | 先頭の英大文字のコードを取り出す | =REGEXEXTRACT(A2,"^[A-Z]+") |
AB-1024-x | AB |
| 12 | 大文字・小文字を区別せずに含むかを調べる | =REGEXMATCH(A2,"(?i)error") |
Timeout ERROR at step 3 | TRUE |
| 13 | 文中のメールアドレスを取り出す | =REGEXEXTRACT(A2,"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}") |
連絡先: taro.yamada@example.com まで | taro.yamada@example.com |
| 14 | メールアドレスの@より前を取り出す | =REGEXEXTRACT(A2,"^([^@]+)@") |
taro.yamada@example.com | taro.yamada |
| 15 | メールアドレスのドメインを取り出す | =REGEXEXTRACT(A2,"@(.+)$") |
taro.yamada@example.com | example.com |
| 16 | URLからドメインを取り出す | =REGEXEXTRACT(A2,"^https?://([^/?#]+)") |
https://www.example.com/items/12?ref=top | www.example.com |
| 17 | メールアドレスの形かを調べる | =REGEXMATCH(A2,"^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$") |
taro.yamada@example | FALSE |
| 18 | 文中の郵便番号を取り出す | =REGEXEXTRACT(A2,"[0-9]{3}-?[0-9]{4}") |
〒100-0001 見本県見本市1-2-3 | 100-0001 |
| 19 | 郵便番号の形(3桁-4桁)かを調べる | =REGEXMATCH(A2,"^[0-9]{3}-[0-9]{4}$") |
100-0001 | TRUE |
| 20 | 電話番号のハイフン・かっこ・空白を削除する | =REGEXREPLACE(A2,"[-() ]","") |
(012) 345-6789 | 0123456789 |
| 21 | 日付を年・月・日の3列に分ける | =REGEXEXTRACT(A2,"([0-9]{4})[-/]([0-9]{1,2})[-/]([0-9]{1,2})") |
開催日 2026/10/05 | 2026 | 10 | 05(3列) |
| 22 | 半角の丸括弧の中を取り出す | =REGEXEXTRACT(A2,"\(([^)]*)\)") |
プロジェクター(東館3F) | 東館3F |
| 23 | 全角の丸括弧の中を取り出す | =REGEXEXTRACT(A2,"(([^)]*))") |
プロジェクター(東館3F) | 東館3F |
| 24 | 括弧と中身を削除する(半角・全角) | =REGEXREPLACE(A2,"[((][^))]*[))]","") |
プロジェクター(東館3F)(予備) | プロジェクター |
| 25 | 【】の中を取り出す | =REGEXEXTRACT(A2,"【([^】]*)】") |
【至急】備品の返却について | 至急 |
| 26 | 区切り文字より前を取り出す | =REGEXEXTRACT(A2,"^[^-]*") |
A102-東館-3F | A102 |
| 27 | 最初の区切り文字より後ろを取り出す | =REGEXEXTRACT(A2,"-(.*)$") |
A102-東館-3F | 東館-3F |
| 28 | 最後の区切り文字より後ろを取り出す | =REGEXEXTRACT(A2,"[^-]*$") |
A102-東館-3F | 3F |
| 29 | 前後の空白を削除する(全角の空白も) | =REGEXREPLACE(A2,"^[\s ]+|[\s ]+$","") |
「□ 山田 太郎 □」 | 山田 太郎 |
| 30 | 連続する空白を半角1つにまとめる | =REGEXREPLACE(A2,"[\s ]+"," ") |
「山田□□太郎 様」 | 山田 太郎 様 |
No.21 のようにかっこが2つ以上ある REGEXEXTRACT は、結果が右隣のセルへ広がります(後述)。No.8 は、数字だけのセルが数値として入力されていても調べられるよう、TO_TEXT で包んでいます。
表計算ソフトに貼れる形(タブ区切り)
次のブロックをコピーして、新しいシートの A1 セルに貼り付けると、A列に元の文字列、B列に数式、C列に説明が入ります。数式は同じ行の A列を見る形(A2、A3…)にしてあるので、貼った直後に結果を見比べられます。
元の文字列 数式 やりたいこと
注文No.A-1024(3個) =REGEXREPLACE(A2,"[^0-9]","") 数字だけを残す(数字だけ抽出)
注文No.A-1024(3個) =REGEXEXTRACT(A3,"[0-9]+") 最初の数字のかたまりを取り出す
注文No.A-1024(3個) =REGEXEXTRACT(A4,"([0-9]+)[^0-9]*$") 最後の数字のかたまりを取り出す
気温 -3.5 度 =VALUE(REGEXEXTRACT(A5,"-?[0-9]+(?:\.[0-9]+)?")) 小数・マイナスつきの数を数値として取り出す
12,800円(送料込み) =VALUE(REGEXREPLACE(A6,"[^0-9.-]","")) 桁区切りや単位を外して数値にする
会議室A-102 =REGEXREPLACE(A7,"[0-9]","") 数字をすべて削除する
備品B棟3階 =REGEXMATCH(A8,"[0-9]") 数字を含むかを調べる
00123 =REGEXMATCH(TO_TEXT(A9),"^[0-9]+$") 数字だけでできているかを調べる
型番 XR-200a(新) =REGEXREPLACE(A10,"[^A-Za-z]","") 英字だけを残す
型番 XR-200a(新) =REGEXREPLACE(A11,"[^0-9A-Za-z]","") 英数字以外を削除する
AB-1024-x =REGEXEXTRACT(A12,"^[A-Z]+") 先頭の英大文字のコードを取り出す
Timeout ERROR at step 3 =REGEXMATCH(A13,"(?i)error") 大文字・小文字を区別せずに含むかを調べる
連絡先: taro.yamada@example.com まで =REGEXEXTRACT(A14,"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}") 文中のメールアドレスを取り出す
taro.yamada@example.com =REGEXEXTRACT(A15,"^([^@]+)@") メールアドレスの@より前を取り出す
taro.yamada@example.com =REGEXEXTRACT(A16,"@(.+)$") メールアドレスのドメインを取り出す
https://www.example.com/items/12?ref=top =REGEXEXTRACT(A17,"^https?://([^/?#]+)") URLからドメインを取り出す
taro.yamada@example =REGEXMATCH(A18,"^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$") メールアドレスの形かを調べる
〒100-0001 見本県見本市1-2-3 =REGEXEXTRACT(A19,"[0-9]{3}-?[0-9]{4}") 文中の郵便番号を取り出す
100-0001 =REGEXMATCH(A20,"^[0-9]{3}-[0-9]{4}$") 郵便番号の形(3桁-4桁)かを調べる
(012) 345-6789 =REGEXREPLACE(A21,"[-() ]","") 電話番号のハイフン・かっこ・空白を削除する
開催日 2026/10/05 =REGEXEXTRACT(A22,"([0-9]{4})[-/]([0-9]{1,2})[-/]([0-9]{1,2})") 日付を年・月・日の3列に分ける
プロジェクター(東館3F) =REGEXEXTRACT(A23,"\(([^)]*)\)") 半角の丸括弧の中を取り出す
プロジェクター(東館3F) =REGEXEXTRACT(A24,"(([^)]*))") 全角の丸括弧の中を取り出す
プロジェクター(東館3F)(予備) =REGEXREPLACE(A25,"[((][^))]*[))]","") 括弧と中身を削除する(半角・全角)
【至急】備品の返却について =REGEXEXTRACT(A26,"【([^】]*)】") 【】の中を取り出す
A102-東館-3F =REGEXEXTRACT(A27,"^[^-]*") 区切り文字より前を取り出す
A102-東館-3F =REGEXEXTRACT(A28,"-(.*)$") 最初の区切り文字より後ろを取り出す
A102-東館-3F =REGEXEXTRACT(A29,"[^-]*$") 最後の区切り文字より後ろを取り出す
山田 太郎 =REGEXREPLACE(A30,"^[\s ]+|[\s ]+$","") 前後の空白を削除する(全角の空白も)
山田 太郎 様 =REGEXREPLACE(A31,"[\s ]+"," ") 連続する空白を半角1つにまとめる
数字だけ抽出する数式の使い分け
「数字だけ」には3通りの意味があります。欲しい結果で数式が変わります。
| 欲しい結果 | 数式 | 「注文No.A-1024(3個)」の結果 |
|---|---|---|
| 文字列の中の数字をすべてつなげる | =REGEXREPLACE(A2,"[^0-9]","") |
10243 |
| 最初の数字のかたまり | =REGEXEXTRACT(A2,"[0-9]+") |
1024 |
| 最後の数字のかたまり | =REGEXEXTRACT(A2,"([0-9]+)[^0-9]*$") |
3 |
結果はテキストです。合計や比較に使うなら =VALUE(REGEXEXTRACT(A2,"[0-9]+")) のように VALUE で包みます。
全角の数字は [0-9] に含まれない
[0-9] も \d も、半角の数字だけを表します。全角の数字が混ざる列では、文字の集まりに全角を足します。
| 数式 | 「全角123と半角45」の結果 |
|---|---|
=REGEXREPLACE(A2,"[^0-9]","") |
45 |
=REGEXREPLACE(A2,"[^0-90-9]","") |
12345 |
数値や日付のセルは TO_TEXT で包む
3つの関数は「テキストでのみ動作する」とヘルプに書かれています。セルの中身が数値・日付・通貨のときは、先にテキストへ変換します。
| 変換の関数 | 構文 | 特徴(ヘルプの記載) |
|---|---|---|
| TO_TEXT | TO_TEXT(値) |
数値をテキストに変換する。通貨・小数・百分率・日付は、いまの表示形式のまま文字列になる。数値でない値はそのまま返る |
| TEXT | TEXT(数値, 表示形式) |
表示形式を自分で指定してテキストにする(例:TEXT(A2,"#.###")) |
=REGEXREPLACE(TO_TEXT(A2),"[^0-9]","")
=REGEXMATCH(TO_TEXT(A2),"^[0-9]{4}$")
=REGEXEXTRACT(TEXT(A2,"yyyy-MM"),"^[0-9]{4}")
TO_TEXT は「見えているとおり」の文字列になるので、表示形式によって結果が変わります。
| セルの表示 | [^0-9] を消した結果 |
気を付けること |
|---|---|---|
| ¥1,200 | 1200 | 記号と桁区切りが消える |
| 2026/10/05 | 20261005 | 年月日がつながる |
| 12.5% | 125 | 小数点も消える。小数点を残すなら [^0-9.] にする |
テキストと数値が混ざる列では、最初からすべて TO_TEXT で包んでおくと、行ごとに直す手間がなくなります。TO_TEXT は数値でない値をそのまま返すので、テキストのセルに使っても結果は変わりません。
キャプチャグループの使い方と、横に広がる動き
正規表現の一部をかっこで囲んだものをキャプチャグループと呼びます。REGEXEXTRACT は、かっこの数で返すものが変わります。
| 正規表現 | 「内線 12-345 まで」の結果 | 返るもの |
|---|---|---|
[0-9]+-[0-9]+ |
12-345 | 一致した全体(1セル) |
([0-9]+)-[0-9]+ |
12 | かっこの中だけ(1セル) |
([0-9]+)-([0-9]+) |
12 | 345 | かっこごとに1列(横に2セル) |
ヘルプにも、かっこを2つ使った数式が2列のデータを返す例が載っています。かっこが複数ある数式は、結果が入るぶんだけ右側の列を空けて入力します。
「まとめたいだけで、取り出したくはない」かっこは、(?: で始めます。
| 正規表現 | 「会場:西館12F」の結果 |
|---|---|
(東|西)館([0-9]+)F |
西 | 12(2列) |
(?:東|西)館([0-9]+)F |
12(1列) |
欲張りな一致に気を付ける
.* はできるだけ長く一致します。括弧が2組ある文字列で差が出ます。
| 正規表現 | 「A(1)B(2)」の結果 |
|---|---|
\((.*)\) |
1)B(2 |
\((.*?)\) |
1 |
\(([^)]*)\) |
1 |
.*?(最短一致)か、[^)]*(閉じ括弧以外の連続)にすると、最初の括弧の中だけを取り出せます。
一致しない行と、列全体への適用
IFERROR で包む
REGEXEXTRACT は一致した部分を返す関数なので、一致する部分が無い行には返す値がありません。IFERROR で包んでおくと、そうした行を空白や決めた文字にそろえられます。IFERROR は、1番目の値がエラーのときに2番目の引数を返し、2番目を省略すると空白を返します(ヘルプの記載)。
=IFERROR(REGEXEXTRACT(A2,"[0-9]{3}-[0-9]{4}"),"")
=IFERROR(VALUE(REGEXEXTRACT(A2,"[0-9]+")),0)
=IF(REGEXMATCH(A2,"@"),REGEXEXTRACT(A2,"@(.+)$"),"メールアドレスなし")
ARRAYFORMULA で列全体に広げる
ARRAYFORMULA は、配列を扱わない関数でも範囲を受け取れるようにする関数です(ヘルプの記載)。先頭のセルに1つ書けば、下の行まで結果が入ります。
=ARRAYFORMULA(IF(A2:A="","",REGEXREPLACE(TO_TEXT(A2:A),"[^0-9]","")))
=ARRAYFORMULA(IFERROR(REGEXEXTRACT(TO_TEXT(A2:A),"[0-9]+"),""))
=ARRAYFORMULA(IF(A2:A="","",REGEXMATCH(TO_TEXT(A2:A),"^[0-9]{3}-[0-9]{4}$")))
空の行に結果を出さないための IF(A2:A="","", … ) と、型をそろえるための TO_TEXT を組にして覚えておくと、どの数式にも当てはめられます。
REGEXMATCH は「一部に一致」で TRUE になる
REGEXMATCH は、文字列のどこかに一致する部分があれば TRUE を返します。全体がその形かを調べたいときは、^(先頭)と $(末尾)で挟みます。
| 正規表現 | 「ab1234」 | 「123」 |
|---|---|---|
[0-9]{3} |
TRUE | TRUE |
^[0-9]{3}$ |
FALSE | TRUE |
大文字と小文字は区別されます。区別せずに調べるなら、先頭に (?i) を付けます。
| 正規表現 | 「code: ab12 / AB34」から取り出される部分 |
|---|---|
[A-Z]+[0-9]+ |
AB34 |
(?i)[A-Z]+[0-9]+ |
ab12 |
RE2 で使えない書き方と、代わりの数式
スプレッドシートの正規表現は RE2 です。ほかの言語やツールで見かける書き方の一部は使えません。RE2 の公式の構文一覧(google/re2 の Syntax ページ)では、先読み・後読み・後方参照などに「NOT SUPPORTED」と書かれています。
RE2 ライブラリで、それぞれの書き方が通るかを確かめました。
# re2_check.py : RE2(pip install google-re2)で書き方が通るかを確かめる
import re2
patterns = [
("先読み", r"[0-9]+(?=円)"),
("否定の先読み", r"^(?!.*test)"),
("後読み", r"(?<=ID:)[0-9]+"),
("否定の後読み", r"(?<!-)[0-9]+"),
("後方参照", r"(.)\1"),
("強欲な量指定子", r"[0-9]++"),
("最短一致", r"\((.*?)\)"),
("大文字小文字を区別しない", r"(?i)error"),
("名前つきグループ", r"(?P<year>[0-9]{4})"),
("単語の境界", r"\bcat\b"),
]
for name, pattern in patterns:
try:
re2.compile(pattern)
print(f"{name:<12} {pattern:<22} 使える")
except re2.error as exc:
print(f"{name:<12} {pattern:<22} 使えない: {exc.args[0].decode()}")
先読み [0-9]+(?=円) 使えない: invalid perl operator: (?=
否定の先読み ^(?!.*test) 使えない: invalid perl operator: (?!
後読み (?<=ID:)[0-9]+ 使えない: invalid perl operator: (?<=
否定の後読み (?<!-)[0-9]+ 使えない: invalid perl operator: (?<!
後方参照 (.)\1 使えない: invalid escape sequence: \1
強欲な量指定子 [0-9]++ 使えない: bad repetition operator: ++
最短一致 \((.*?)\) 使える
大文字小文字を区別しない (?i)error 使える
名前つきグループ (?P<year>[0-9]{4}) 使える
単語の境界 \bcat\b 使える
(エラーの文は RE2 ライブラリが返したものです。スプレッドシートの画面に出る文言とは異なります。)
使えない書き方は、次のように書き換えられます。
| やりたいこと | 使えない書き方 | 代わりの数式 | 結果の例 |
|---|---|---|---|
| 「円」の直前の数字 | [0-9]+(?=円) |
=REGEXEXTRACT(A2,"([0-9]+)円") |
「合計 1200円(3点)」→ 1200 |
| 「ID:」の直後の数字 | (?<=ID:)[0-9]+ |
=REGEXEXTRACT(A2,"ID:([0-9]+)") |
「ID:4071 山田」→ 4071 |
| 「test」を含まない行 | ^(?!.*test) |
=NOT(REGEXMATCH(A2,"test")) |
「sample data」→ TRUE |
| 2つの条件を両方満たす | 先読みを2つ並べる | =AND(REGEXMATCH(A2,"[0-9]"),REGEXMATCH(A2,"[A-Z]")) |
条件ごとに関数を分ける |
| 同じ文字の連続を見つける | (.)\1 |
決まった文字なら "ーー" や "!!" のように並べて書く |
— |
考え方は1つです。「前後の条件」は正規表現の中にそのまま書き、欲しい部分だけをかっこで囲む。 「〜でない」「〜かつ〜」は、NOT や AND など関数の側で組み立てます。
もう1点、ヘルプには「Unicode 文字クラスのマッチング以外の RE2 が使える」とあります。文字の種類は [0-9] [A-Za-z] のように範囲で書くのが確実です。
改行を含むセル
. は改行に一致しません。セル内で改行している文字列をまたいで取り出すときは、先頭に (?s) を付けます。
| 正規表現 | 「1行目(改行)2行目」での一致 |
|---|---|
目.*行 |
一致なし |
(?s)目.*行 |
「目(改行)2行」に一致 |
3つの関数と SPLIT・SUBSTITUTE・LEFT/MID の選び方
正規表現が必要ない場面も多くあります。「決まった文字」か「形(パターン)」かで選びます。
| 条件 | 選ぶ関数 | 例 |
|---|---|---|
| 決まった文字を、別の決まった文字に置き換える | SUBSTITUTE | =SUBSTITUTE(A2,"-","") |
| 位置と文字数が決まっている(先頭3文字、4文字目から2文字) | LEFT / MID / RIGHT | =LEFT(A2,3) |
| 区切り文字で、すべての部分を列に分けたい | SPLIT | =SPLIT(A2,"-") |
| 「数字の連続」「3桁-4桁」のように形で指定して取り出す | REGEXEXTRACT | =REGEXEXTRACT(A2,"[0-9]{3}-[0-9]{4}") |
| 「数字以外」「括弧と中身」のように形で指定して消す | REGEXREPLACE | =REGEXREPLACE(A2,"[^0-9]","") |
| 形に合うかどうかで行を分ける | REGEXMATCH | =REGEXMATCH(A2,"^[A-Z]{2}-[0-9]+$") |
| 区切りが何種類もある、位置が行ごとに違う | REGEXEXTRACT / REGEXREPLACE | =REGEXREPLACE(A2,"[-/・ ]","") |
SPLIT は、区切り文字に複数の文字を渡すと、既定ではその1文字ずつを区切りとして扱います(ヘルプの記載。3番目の引数を FALSE にすると、文字列全体を1つの区切りとして扱う)。「区切りは決まっていて、全部の部分が欲しい」なら SPLIT、「一部だけ欲しい」「形で選びたい」なら REGEXEXTRACT、と覚えると選びやすくなります。
「A102-東館-3F」を例に比べます。
| 欲しいもの | いちばん短い書き方 |
|---|---|
| 3つとも列に分ける | =SPLIT(A2,"-") |
| 先頭の A102 だけ | =REGEXEXTRACT(A2,"^[^-]*") |
| 最後の 3F だけ | =REGEXEXTRACT(A2,"[^-]*$") |
| ハイフンを消す | =SUBSTITUTE(A2,"-","") |
| 先頭の英字1文字 | =LEFT(A2,1) |
| 数字だけ | =REGEXREPLACE(A2,"[^0-9]","") |
確かめて分かったこと
- 「数字だけ抽出」は、REGEXREPLACE と REGEXEXTRACT で結果が違いました。 「注文No.A-1024(3個)」は、前者が 10243、後者が 1024 です。数字が2か所以上ある列では、どちらが欲しいかを先に決めます。
\dも[0-9]も、全角の数字には一致しませんでした。 「123番」からは何も取り出せず、[0-90-9]にすると取り出せました。- かっこを1つ足すだけで、返る内容が「全体」から「かっこの中」に変わりました。
[0-9]+-[0-9]+は 12-345、([0-9]+)-[0-9]+は 12 です。まとめるためだけのかっこは(?:で書きます。 - 先読み・後読みは、RE2 では正規表現として受け付けられませんでした(invalid perl operator)。かっこで囲む書き方に直すと、同じ値(1200、4071)を取り出せました。
[^-]*$は「最後の区切りより後ろ」を返しました(A102-東館-3F → 3F)。末尾の$があるので、途中の A102 では一致が成立しないためです。- TO_TEXT で包むと表示形式ごと文字列になるので、12.5% から数字だけを残すと 125 になります。 小数点が要るときは、消す対象から
.を外します。
よくある質問
Q. スプレッドシートで数字だけ抽出するには?
A. =REGEXREPLACE(A1,"[^0-9]","") で数字以外をすべて消します。最初の数字のかたまりだけが欲しいときは =REGEXEXTRACT(A1,"[0-9]+") を使います。
Q. REGEXEXTRACT と REGEXREPLACE の違いは? A. REGEXEXTRACT は一致した最初の部分を取り出し、REGEXREPLACE は一致した部分をすべて置き換えます。「残したい形」を書くなら前者、「消したい形」を書くなら後者が短く済みます。
Q. REGEXEXTRACT が数値のセルで使えないときは?
A. TO_TEXT(A1) で包んでテキストにしてから渡します。3つの正規表現関数はテキストだけを受け取るためです。
Q. REGEXEXTRACT で複数の値を取り出すには? A. 取り出したい部分をそれぞれかっこで囲みます。かっこの数だけ、右隣のセルへ結果が広がります。
Q. スプレッドシートの正規表現で先読みは使えますか? A. 使えません。スプレッドシートが使う RE2 は先読み・後読み・後方参照に対応していないので、欲しい部分をかっこで囲む書き方に置き換えます。
Q. 特定の文字より前(後ろ)だけを取り出すには?
A. 前は =REGEXEXTRACT(A1,"^[^-]*")、後ろは =REGEXEXTRACT(A1,"-(.*)$") です。- の部分を、区切りにしたい文字に置き換えて使います。
まとめ
- 正規表現関数は取り出す REGEXEXTRACT、置き換える REGEXREPLACE、調べる REGEXMATCHの3つです。
- 数字だけ抽出は
REGEXREPLACE(A1,"[^0-9]","")、最初の1件だけならREGEXEXTRACT(A1,"[0-9]+")です。 - 3つともテキストだけを受け取ります。数値や日付のセルは TO_TEXT で包み、結果を計算に使うなら VALUE で包みます。
- かっこ(キャプチャグループ)で欲しい部分だけを取り出せます。かっこが複数あると横に広がります。
- スプレッドシートの正規表現は RE2。先読み・後読み・後方参照は使えないので、かっこや NOT・AND で書き換えます。
- 一致しない行は IFERROR、列全体は ARRAYFORMULA と組み合わせます。
- 決まった文字なら SUBSTITUTE、決まった位置なら LEFT/MID、全部に分けるなら SPLIT。形で指定するときに正規表現関数を選びます。
参考・出典
- Google ドキュメント エディタ ヘルプ「REGEXEXTRACT」https://support.google.com/docs/answer/3098244?hl=ja
- Google ドキュメント エディタ ヘルプ「REGEXREPLACE」https://support.google.com/docs/answer/3098245?hl=ja
- Google ドキュメント エディタ ヘルプ「REGEXMATCH」https://support.google.com/docs/answer/3098292?hl=ja
- Google ドキュメント エディタ ヘルプ「TO_TEXT」https://support.google.com/docs/answer/3094285?hl=ja
- Google ドキュメント エディタ ヘルプ「TEXT」https://support.google.com/docs/answer/3094139?hl=ja
- Google ドキュメント エディタ ヘルプ「IFERROR」https://support.google.com/docs/answer/3093304?hl=ja
- Google ドキュメント エディタ ヘルプ「ARRAYFORMULA」https://support.google.com/docs/answer/3093275?hl=ja
- Google ドキュメント エディタ ヘルプ「SPLIT」https://support.google.com/docs/answer/3094136?hl=ja
- google/re2「Syntax」https://github.com/google/re2/wiki/Syntax
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「スプレッドシート正規表現関数の使い方|REGEXEXTRACT例一覧」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。