Elcamy
コラム一覧に戻る
#ビジネス2024.08.15

正規表現とは?初心者でもわかる基本記号から実践的な使い方まで完全ガイド

正規表現とは文字列のパターンを記述する書き方です。Python・BigQuery・Googleスプレッドシートでの実践的なコード例と、基本記号の完全一覧をわかりやすく解説します。

「正規表現って聞いたことあるけど、なんか難しそう…」

そう感じている方は多いのではないでしょうか。でも実は、正規表現は 一度覚えると業務効率が劇的に上がる ツールです。

メールアドレスの形式チェック、ログファイルからの特定データ抽出、スプレッドシートの文字列置換…こういった処理を、正規表現を使えば数文字で書けるようになります。

この記事では、正規表現の基本概念から、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・スプレッドシートなど環境を問わず動く

正規表現の基本記号一覧

正規表現で使われる記号(メタキャラクタ)を体系的に整理します。

位置を指定するアンカー

文字列のどの位置にマッチするかを指定する記号です。

記号意味マッチする文字列
^行の先頭^hellohello world(先頭がhello)
$行の末尾world$hello world(末尾がworld)
\b単語の境界\bcat\bthe cat sat(catが単語として独立)

繰り返しを表す記号

直前の文字やグループの繰り返し回数を指定します。

記号意味マッチする例
*0回以上go*gleggle, gogle, google
+1回以上go+glegogle, google(ggleは不可)
?0回または1回colo?rcolor, 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数字09
\D数字以外a, @, など
\w英数字またはアンダースコアaz, AZ, 09, _
\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|dogcat, 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-5678090-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(概念実証)から、本格的なシステム開発、運用サポートまでワンストップで対応しています。「自社の技術課題を解決したい」「開発を総合的に相談したい」という方は、お気軽にご相談ください。


無料相談受付中

AIの導入、まずはご相談から

貴社の課題に合わせた最適なソリューションをご提案します。
初回相談は無料、お気軽にお問い合わせください。

ElcamyGoogle Cloud Partner