「正規表現って聞いたことあるけど、なんか難しそう…」
そう感じている方は多いのではないでしょうか。でも実は、正規表現は 一度覚えると業務効率が劇的に上がる ツールです。
メールアドレスの形式チェック、ログファイルからの特定データ抽出、スプレッドシートの文字列置換…こういった処理を、正規表現を使えば数文字で書けるようになります。
この記事では、正規表現の基本概念から、Python・Googleスプレッドシート・BigQueryでの実践的な使い方まで、初心者でもわかるように解説します。
Elcamyでは、最新AIを用いたPoC(概念実証)から、システム開発、運用チームによる伴走支援まで一貫して対応可能です。ビジネス課題に合わせた最適なソリューションをお探しの方は、お気軽にご相談ください。 https://www.elcamy.com/service
正規表現とは何か?
正規表現(英: Regular Expression、略して「regex」または「regexp」)とは、文字列のパターンを表現するための記法 です。
たとえば「3桁の数字のあとにハイフン、4桁の数字が続く文字列」というパターンを、正規表現では次のように書けます。
\d{3}-\d{4}
このたった10文字で、「03-1234」「090-5678」などに一致し、「abc-1234」や「03-12」には一致しないという複雑な条件を表現できます。
正規表現は特定のプログラミング言語に依存せず、Python、JavaScript、SQL、Google スプレッドシートなど、ほぼすべての開発環境・ツールで使えます。一度マスターすれば、どこでも応用できる汎用スキルです。
なぜ正規表現を使うのか
正規表現を使うメリットは主に3つです。
- 複雑な条件を短く書ける: 数十行かかる処理を数文字で表現できる
- 再利用できる: 一度書いたパターンはそのまま他の場所でも使える
- ツールを選ばない: Python・SQL・スプレッドシートなど環境を問わず動く
正規表現の基本記号一覧
正規表現で使われる記号(メタキャラクタ)を体系的に整理します。
位置を指定するアンカー
文字列のどの位置にマッチするかを指定する記号です。
| 記号 | 意味 | 例 | マッチする文字列 |
|---|---|---|---|
^ | 行の先頭 | ^hello | hello world(先頭がhello) |
$ | 行の末尾 | world$ | hello world(末尾がworld) |
\b | 単語の境界 | \bcat\b | the cat sat(catが単語として独立) |
繰り返しを表す記号
直前の文字やグループの繰り返し回数を指定します。
| 記号 | 意味 | 例 | マッチする例 |
|---|---|---|---|
* | 0回以上 | go*gle | ggle, gogle, google |
+ | 1回以上 | go+gle | gogle, google(ggleは不可) |
? | 0回または1回 | colo?r | color, colour |
{n} | ちょうどn回 | \d{4} | 2024(4桁の数字) |
{n,} | n回以上 | \d{3,} | 123, 12345 |
{n,m} | n回以上m回以下 | \d{2,4} | 12, 123, 1234 |
文字の種類を指定する記号
| 記号 | 意味 | マッチする文字 |
|---|---|---|
. | 任意の1文字(改行除く) | a, 1, @ など |
\d | 数字 | 0〜9 |
\D | 数字以外 | a, @, あ など |
\w | 英数字またはアンダースコア | a〜z, A〜Z, 0〜9, _ |
\W | \w 以外 | スペース、@, # など |
\s | 空白文字 | スペース、タブ、改行 |
\S | 空白文字以外 | a, 1, @ など |
[abc] | a、b、cのいずれか | a, b, c |
[a-z] | aからzのいずれか | アルファベット小文字1文字 |
[^abc] | a、b、c以外 | d, e, 1 など |
グループ化とOR
| 記号 | 意味 | 例 | マッチする例 |
|---|---|---|---|
() | グループ化 | (ab)+ | ab, abab, ababab |
| | または(OR) | cat|dog | cat, dog |
(?:...) | キャプチャしないグループ | (?:https?|ftp):// | https://, http://, ftp:// |
エスケープ
. や * などの記号自体にマッチさせたい場合は、バックスラッシュ \ でエスケープします。
3\.14 → "3.14" にマッチ(ピリオドそのもの)
\d+円 → "100円", "2500円" などにマッチ
正規表現の実践例
ここからは、実際の業務でよく使う場面を中心に解説します。
メールアドレス・電話番号の検証
フォームの入力チェックは正規表現の代表的な使い道です。
メールアドレスの検証(シンプル版)
^[\w\.-]+@[\w\.-]+\.[a-zA-Z]{2,}$
[\w\.-]+: ユーザー名部分(英数字、ドット、ハイフン)@: アットマーク[\w\.-]+: ドメイン名\.[a-zA-Z]{2,}:.com,.jp,.co.jpなど
日本の電話番号
^0\d{2,3}-\d{3,4}-\d{4}$
03-1234-5678、090-1234-5678 などにマッチします。
Googleスプレッドシートでの使い方
スプレッドシートでは、REGEX系の関数で正規表現を使えます。コードを書かずに使えるため、ビジネスサイドの方にも特におすすめです。
| 関数 | 用途 | 例 |
|---|---|---|
REGEXMATCH | パターンに一致するか判定(TRUE/FALSE) | メールアドレス形式チェック |
REGEXEXTRACT | パターンに一致する部分を抽出 | 文字列から郵便番号だけ取り出す |
REGEXREPLACE | パターンに一致する部分を置換 | 電話番号のハイフンを統一する |
使用例: 郵便番号の抽出
セルA1に 〒123-4567 東京都... という住所が入っている場合、郵便番号だけを抜き出すには:
=REGEXEXTRACT(A1, "\d{3}-\d{4}")
結果: 123-4567
使用例: 電話番号の正規化
0312345678(ハイフンなし)を 03-1234-5678 に変換するには:
=REGEXREPLACE(A1, "^(0\d{1,3})(\d{3,4})(\d{4})$", "$1-$2-$3")
Pythonでの使い方(reモジュール)
Pythonでは標準ライブラリの re モジュールを使います。AIを活用したデータ分析や自動化処理でよく登場します。
import re
text = "連絡先: 03-1234-5678 または 090-9876-5432"
# パターンを定義
pattern = r"0\d{2,3}-\d{3,4}-\d{4}"
# マッチする全箇所を検索
results = re.findall(pattern, text)
print(results)
# ['03-1234-5678', '090-9876-5432']
主なreモジュールの関数
| 関数 | 説明 | 戻り値 |
|---|---|---|
re.match() | 文字列の先頭からマッチ | マッチオブジェクトまたはNone |
re.search() | 文字列全体を検索し最初の1件 | マッチオブジェクトまたはNone |
re.findall() | マッチする全箇所をリストで返す | リスト |
re.sub() | マッチ箇所を置換 | 置換後の文字列 |
# 置換の例: 電話番号をマスキング
masked = re.sub(r"0\d{2,3}-\d{3,4}-\d{4}", "***-****-****", text)
print(masked)
# '連絡先: ***-****-**** または ***-****-****'
BigQueryでの使い方
データ分析基盤として BigQuery を使っている場合も、正規表現はログ解析やデータクレンジングに活躍します。
REGEXP_CONTAINS: パターンに一致するか判定
SELECT *
FROM `project.dataset.logs`
WHERE REGEXP_CONTAINS(url, r'/(admin|dashboard)/')
管理画面へのアクセスログだけを抽出する例です。
REGEXP_EXTRACT: 一致部分を抽出
SELECT
REGEXP_EXTRACT(email, r'@(.+)') AS domain
FROM `project.dataset.users`
メールアドレスからドメイン部分(gmail.com など)を抽出します。
REGEXP_REPLACE: 一致部分を置換
SELECT
REGEXP_REPLACE(phone, r'[^\d]', '') AS phone_normalized
FROM `project.dataset.customers`
電話番号から数字以外の文字(ハイフンや括弧)を除去し、数字のみにします。
Google Cloud を活用したデータ分析基盤の構築事例もあわせてご覧ください。
正規表現を試せるオンラインツール
正規表現は書いてすぐ試せる環境が大切です。以下のツールが便利です。
regex101 最も広く使われているオンラインテスターです。Python・JavaScript・PHPなど言語を選んでテストでき、各部分の意味もハイライト表示してくれます。入門から実務まで幅広く使えます。
Rubular Ruby向けのシンプルなテスターです。画面がシンプルで使いやすく、正規表現を初めて学ぶ方にも向いています。
Google スプレッドシート自体 スプレッドシートで使う場合は、実際のシート上で REGEXMATCH 関数を使いながら動作を確認するのが最も直感的です。
正規表現でよくあるミスと対処法
.(ドット)が意図せず任意文字にマッチする
ドットは「任意の1文字」を意味します。ピリオドそのものにマッチさせたい場合は \. とエスケープする必要があります。
# ❌ 意図しないマッチ
3.14 → "3.14" にも "3x14" にもマッチしてしまう
# ✅ 正しい書き方
3\.14 → "3.14" だけにマッチ
貪欲マッチで想定外の範囲を取得してしまう
.* は「できるだけ多くの文字」にマッチしようとします(貪欲マッチ)。HTMLタグを取り出す場合などに問題になります。
テキスト: <b>太字</b>と<i>斜体</i>
パターン: <.+>
マッチ: <b>太字</b>と<i>斜体</i>(全部) ← 意図しない
パターン: <.+?>(非貪欲)
マッチ: <b>, </b>, <i>, </i> ← 期待通り
非貪欲マッチには ? を繰り返し記号の後に付けます(*?, +?)。
日本語文字のマッチ
\w や \d は基本的に ASCII 文字のみを対象とします。日本語を含む場合は、文字クラスで明示するか、[^\s](空白以外)などで代替します。
まとめ
正規表現は最初は記号が多くて難しく感じますが、基本パターンをいくつか覚えるだけで業務の幅が大きく広がります。
この記事で紹介したポイントをまとめます。
- 正規表現は文字列のパターンを表す記法で、Python・BigQuery・スプレッドシートなど幅広く使える
- アンカー・繰り返し・文字クラス・グループの4種類の記号を覚えるのが最初のステップ
- Googleスプレッドシートの REGEX 関数はコード不要で使えるため、ビジネスサイドにも実用的
- Pythonの
reモジュールと BigQuery の REGEXP 関数でデータ処理を自動化できる regex101などのオンラインツールでまず動かしてみるのが上達の近道
Elcamyでは、AI・データ活用のためのPoC(概念実証)から、本格的なシステム開発、運用サポートまでワンストップで対応しています。「自社の技術課題を解決したい」「開発を総合的に相談したい」という方は、お気軽にご相談ください。