Tableauで「文字列から一部を取り出す」処理をしたいときに役立つのが REGEXP_EXTRACT
関数です。正規表現にマッチする文字列の一部をグループ抽出できるこの関数は、たとえば都道府県名の接尾辞を見て分類したり、複数の項目が詰まったフィールドから必要な情報だけを切り出すときに活躍します。本記事ではその基本構文から、REGEXP_EXTRACT_NTH
の応用、さらによくある失敗パターンやFAQまで、検索ニーズに応じて丁寧に解説します。
REGEXP_EXTRACT関数とは?
REGEXP_EXTRACT
関数は、以下3つの機能を持つ文字列関数です:
- 正規表現パターンと一致するかどうかを判定する
- 一致していれば “グループ化 (括弧)” された部分だけを抽出する
- 一致しなければ
NULL
を返す
REGEXP_EXTRACT([対象文字列], "(正規表現パターン)")
グループ化とは、正規表現の中で ()
を使って指定された範囲のことです。ここにマッチした部分だけが返されます。
基本例:そのままの値を返す(全文一致)
REGEXP_EXTRACT([都道府県], "(.*)")
この式では「何でもいい文字 .
を0回以上繰り返す *
」というパターンに一致し、文字列全体を1グループとして返します。結果として、[都道府県]の値がそのまま返ってきます。
応用例:条件付きで文字の一部を取り出す
例1:最後が「都」で終わるとき、先頭1文字を抽出
REGEXP_EXTRACT([都道府県], "(^.).*都$")
^.
は先頭1文字を意味します。.*都$
は任意の文字の後に「都」で終わるパターン。()
で囲った^.
部分だけが返されます。
入力 | 出力 |
---|---|
東京都 | 東 |
大阪府 | NULL |
REGEXP_EXTRACT_NTH関数:複数グループから取り出す
例2:2つ目のグループを取得する
REGEXP_EXTRACT_NTH([都道府県], "(^.)(.)(都)$", 2)
この式では:
(^.)
:1文字目(グループ1)(.)
:2文字目(グループ2)(都)
:末尾(グループ3)
補足:「(^.)」は行頭の1文字、「(.)」は2文字目、「(都)」は文字列の末尾が”都”である場合のみ一致します。
2
を指定しているので、「京」のような 2番目の文字が返されます。
入力 | 出力 |
---|---|
東京都 | 京 |
福井県 | NULL |
実務ユースケース
例3:都道府県の末尾から分類(都・道・府・県)
REGEXP_EXTRACT([都道府県], "(都|道|府|県)$")
末尾の都道府県種別だけを抜き出して分類やフィルタに使えます。
例4:商品コードからカテゴリを抽出
REGEXP_EXTRACT([商品コード], "^(A|B|C)[0-9]{3}")
A001
,B456
のようなコードの先頭1文字カテゴリだけを取得。
例5:カスタム項目からメールアドレス部分だけを抜く
REGEXP_EXTRACT([テキスト], "([\w._%+-]+@[\w.-]+\\.[a-zA-Z]{2,})")
- 自由入力されたテキストからメールアドレス形式だけを抽出できます。
正規表現構文のポイント(初心者向け)
パターン | 意味 |
---|---|
. | 任意の1文字 |
* | 0回以上の繰り返し |
^ | 行頭 |
$ | 行末 |
() | グループ化 |
` | ` |
\d | 数字 |
よくあるミスと対策
Q. 値が返ってこない/NULLになる
A. 正規表現に一致していない、もしくは ()
で囲っていないと返り値が NULL
になります。
Q. グループが複数あるのに1つ目しか返ってこない
A. REGEXP_EXTRACT
は最初のグループだけ返します。2つ目以降が必要なときは REGEXP_EXTRACT_NTH
を使ってください。
Q. 正規表現がよくわからない
A. まずは .*
(なんでも)や ^
(先頭)・$
(末尾)など、基本の記号から使ってみるのがオススメです。
まとめ
REGEXP_EXTRACT
は 正規表現にマッチした部分から1グループを返すREGEXP_EXTRACT_NTH
を使えば 2番目以降のグループも取得可能- 実務ではメール抽出・商品コード処理・都道府県の分類などに活用
- 正規表現のグループ化
()
を忘れるとNULL
になるので注意
検索されやすい regexp_extract tableau
, regexp_extract 使い方
, tableau 正規表現
に正面から対応する構成になっています。
Comment