スポンサーリンク

Python正規表現の使い方入門|reモジュールで文字列を簡単マッチング!

Python入門

1. はじめに|正規表現ってなに?使えるとどう便利?

みなさん、「文章の中から数字だけを取り出したい」とか、「メールアドレスっぽい文字列だけをチェックしたい」と思ったことはありませんか?

そんなときに大活躍するのが 「正規表現(せいきひょうげん)」 という技術です!

正規表現とは、簡単に言うと「文字の並び方(パターン)を表す特別な書き方」のことです。
たとえば、「数字3ケタだけを取り出したい」とか「英語の小文字だけを探したい」といったことを、コードでスッキリ書けるようになります。


🔍 たとえばこんな場面で役立ちます!

  • フォームに入力された電話番号が正しい形かチェックしたい
  • Webページから「価格情報(〇〇円)」だけを抽出したい
  • テキストファイルの中から「.com」で終わるURLだけを取り出したい

…こういった作業を、人の目で探すのではなく、自動で・高速にやってくれるのが正規表現なんです。


💡 正規表現は難しい?でも大丈夫!

たしかに、正規表現にはちょっと見慣れない記号([]+^ など)が出てきます。

でも心配しないでください!
このあと順番にゆっくり説明していくので、「意味のあるパズル」だと思って、少しずつ覚えていきましょう。


この記事では、Pythonで正規表現を使うためのモジュール re の基本と、よく使う書き方・関数をやさしく解説していきます。

「難しそう…」と思った方も、きっと読み終わる頃には「ちょっと使ってみたいかも!」と思えるはずです😊

それではさっそく、正規表現の基本ルールから見ていきましょう!




2. 正規表現の基本記号と意味まとめ(初心者でも図解で理解)

正規表現では、「特定の文字の並び」を表すために、ちょっと変わった記号を使います。
でも大丈夫!意味がわかれば「こんな便利なものがあったのか!」と感じるはずです😊


✅ よく使う記号とその意味

記号意味
.なんでも1文字(改行は除く)a.cabc, a9c などにマッチ
[]指定した文字のどれか1文字[abc]a, b, cのどれか
[^]指定した文字以外の1文字[^0-9] → 数字以外の1文字にマッチ
^行や文字列の先頭^abcabcで始まる文字列
$行や文字列の末尾xyz$xyzで終わる文字列
*直前の文字が0回以上繰り返すab*cac, abc, abbbc など
+直前の文字が1回以上繰り返すab+cabc, abbc など(acはマッチしない)
?直前の文字が0回または1回だけab?cac, abc にマッチ
{n}直前の文字がちょうどn回a{3}aaa にマッチ
{n,m}直前の文字がn〜m回繰り返しa{2,4}aa, aaa, aaaa にマッチ
``AまたはBのどちらか

🧠 ちょっとだけ例題で練習!

import re

# 例1: 数字3ケタの文字列にマッチ
pattern = r"\d{3}"
text = "郵便番号123-4567"
re.search(pattern, text) # → マッチ('123')
# 例2: 英字で始まり、数字で終わる文字列にマッチ
pattern = r"^[a-zA-Z]+[0-9]$"
text = "abc3"
re.fullmatch(pattern, text) # → マッチ!

🎯 覚えるコツ

  • 最初は .(何でも1文字) や *(0回以上)だけでも十分便利!
  • 「英字だけ」「数字だけ」「特定の文字を除く」など、基本のパターンから練習しましょう。
  • 実際にコードで試すことで、「ああ、こうなるのか!」とスッと理解できますよ!

次は、これらの正規表現を Pythonで実際に使う方法 を見ていきましょう👇
reモジュールの登場です!




3. Pythonでの使い方(reモジュール)|match・search・groupの違いも解説

正規表現をPythonで使うためには、まず re というモジュールを使います。
これを使うことで、「この文字列にパターンが合ってるかな?」というチェックができます!


🧩 ステップ1:reモジュールをインポートしよう!

import re

この1行を書くことで、正規表現が使えるようになります。


🧩 ステップ2:パターンは“r”付きの文字列で書こう!

正規表現のパターンは、Pythonでは**「ロー文字列(Raw String)」**で書くのが基本です。

pattern = r"abc\d"  # 「abcのあとに数字1文字」という意味

r を付けることで、「\」などのバックスラッシュが普通の文字として使えるようになります。


🧪 match()・search()・fullmatch()の違いって?

Pythonの re モジュールでは、次の3つの関数がよく使われます。

関数なにをチェックする?
re.match()文字列の先頭だけをチェック"abc123"abc にマッチ
re.search()文字列のどこか1か所でも合っていればOK"xxabc123yy" でも abc にマッチ
re.fullmatch()文字列全体がパターンと一致するかチェック"abc123" が完全に一致すればOK

🧪 実際に使ってみよう!

import re

text = "商品コードabc123"

# search: 文字列の中から探す
result = re.search(r"abc\d+", text)

if result:
print("見つかった!→", result.group()) # → abc123
else:
print("見つからなかった…")

🧠 マッチしたあとってどうなるの?

match()search() が成功すると、「マッチオブジェクト」という特別なものが返ってきます。

このオブジェクトから、マッチした内容を取り出す方法がこちら👇

メソッド意味
.group()マッチした文字列を取り出す'abc123'
.start()マッチ部分の開始インデックス5(文字列の6文字目)
.end()マッチ部分の終了インデックス11
.span()開始と終了のタプル(5, 11)
print(result.group())  # マッチした文字列そのもの
print(result.start()) # 開始位置
print(result.end()) # 終了位置
print(result.span()) # (開始, 終了)

ここまで覚えれば、**「文章の中から特定のパターンを探す」**という作業がバッチリできるようになります!




4. よく使う関数と注意点まとめ(fullmatch, findall, エスケープ)

Pythonで正規表現を使うなら、match()search() だけじゃもったいない!
他にも便利な関数や、「つまづきやすい注意ポイント」がいくつかあります。ここでまとめて紹介します😊


✅ re.fullmatch():文字列全体とピッタリ一致?

これを使うと、「文字列全体がこのパターンに合っているかどうか」をチェックできます。

import re

text = "abc123"
pattern = r"[a-z]{3}\d{3}"

if re.fullmatch(pattern, text):
print("パターンと完全一致!") # ←出力される

📌 match()search() は一部でも一致すればOKですが、
fullmatch() は文字列全体が一致していないとダメです。


✅ re.findall():マッチするものを全部リストで返す!

「文章の中にあるすべての数字を取り出したい!」なんてときには findall() が便利です。

import re

text = "今日は2025年6月12日です。明日は13日です。"
pattern = r"\d+"

result = re.findall(pattern, text)
print(result) # → ['2025', '6', '12', '13']

📝 マッチした部分をすべてリストで返してくれるので、データの集計や分析にも便利です!


✅ 正規表現でよくあるミス「エスケープ忘れ」に注意!

正規表現には、「*」や「.」など、特別な意味を持つ記号がいくつもあります。
もし、それらの記号を普通の文字として扱いたいときは「バックスラッシュ(\)」でエスケープが必要です。

文字通常の意味普通の文字として使いたい場合
.何でも1文字\.(ピリオドとして扱う)
*0回以上の繰り返し\*
?0〜1回の繰り返し\?
\エスケープ記号そのもの\\
text = "合計は5,000円です。"
pattern = r"\d{1,3},\d{3}"

result = re.search(pattern, text)
print(result.group()) # → 5,000

✅ 上の例では「カンマ付きの数字」にマッチするようにエスケープなしでもOKですが、
「ピリオド .」や「$マーク」は \.\$ として使わないと意図しないマッチになります。


✅ その他にも便利な関数が!

関数名内容使用例
re.sub()パターンに一致した部分を置き換える改行をスペースに置き換えたいときなど
re.split()パターンに基づいて文字列を分割複数の記号や空白で分けたいときなど

これらは少し発展的なので、慣れてきたら使ってみましょう!

ここまでで、正規表現の基本からよく使う関数まで一通り学べました!




5. よくある実用例

ここからは、「実際にどんなふうに正規表現を使うのか?」を具体的に見ていきましょう!

今回は次の3つの例で、「それっぽい文字列を探す方法」を紹介します。

  • 📧 メールアドレスの判定
  • 📱 電話番号(携帯)の抽出
  • 🏣 郵便番号(7桁)の抽出

📧 メールアドレスのパターンを見つけたい!

メールアドレスは、こんな形が多いですよね:

example123@example.com

これに対応する正規表現パターンは次のようになります。

import re

text = "お問い合わせは info@sample.co.jp までご連絡ください。"
pattern = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"

result = re.search(pattern, text)

if result:
print("メールアドレス:", result.group()) # → info@sample.co.jp

💡 このパターンでは「@」の前後に英数字や記号が並んでいる構成を判定しています。


📱 携帯電話番号を見つけたい!

よくある携帯電話番号はこんな形式:

080-1234-5678

これを見つける正規表現はこうです👇

text = "連絡先は 090-1234-5678 です。"
pattern = r"0\d{2}-\d{4}-\d{4}"

match = re.search(pattern, text)
if match:
print("電話番号:", match.group()) # → 090-1234-5678

📌 0\d{2} で「090」「080」などをキャッチし、- を含めた形式に対応しています。


🏣 郵便番号(ハイフンあり・なし)に対応!

日本の郵便番号は次のような形式がよく使われます。

  • 123-4567
  • 1234567

両方に対応できるようにしてみましょう。

text = "〒123-4567 の住所を入力してください。"
pattern = r"\d{3}-?\d{4}"

zip_match = re.search(pattern, text)
if zip_match:
print("郵便番号:", zip_match.group()) # → 123-4567

-? は「ハイフンがあってもなくてもOK」という意味です。


🙌 ポイントまとめ

ターゲット正規表現パターンのポイント
メール@.を含み、英数字+記号が混じる
電話番号「0XX-XXXX-XXXX」のような3パート構成
郵便番号「3桁+4桁」、ハイフンあり・なし両対応

「正規表現って難しそう」と思っていた人も、こうして具体例を見てみると
「あ、意外と使えるかも!」と思えたのではないでしょうか😊




6. まとめ|正規表現はコツコツ覚えるのがコツ!

ここまで、Pythonで使える正規表現について、基本の記号から具体的な使い方、実用例までを一気に学んできました。
「正規表現ってなんだか難しそう…」というイメージが少しでもやわらいでいたらうれしいです😊


🧠 この記事で学んだこと

  • 正規表現とは?
    → 文字列のパターンを表現するルール!
  • 記号の意味
    [], ., *, +, {n,m} など、便利な記号がたくさん!
  • Pythonでの使い方
    re.match(), re.search(), re.fullmatch(), re.findall() を使えば検索・抽出も自由自在!
  • 実用例
    → メールアドレスや電話番号、郵便番号など、日常的によく出てくるデータも簡単に処理できる!

📌 これからどう学ぶ?

正規表現は「一度に全部覚える」ものではありません。
最初は「必要な場面で調べて使う」だけでOK!

「あれ?この記号ってなんだっけ?」
→ Google検索すればすぐ見つかります。

大事なのは、「なんとなくでも書ける」「調べながらでも使える」状態を目指すことです✨
Pythonだけでなく、HTMLエディタや他のプログラミング言語、検索ツールなどでも正規表現は活用できますよ。


✅ あわせて読みたい


よくある質問(Q&A)

Q
正規表現を使うのは難しいですか?
A

最初は少しとっつきにくいですが、基本の記号だけでも十分便利に使えます!

Q
re.match()re.search()はどう使い分ければいいの?
A

文字列の「先頭だけ見る」ならmatch()、全文の中から探したいならsearch()が便利です。

Q
エスケープってなんですか?
A

特別な記号(例:.*など)を「ただの文字」として扱いたいときに、\をつける操作です(例:\.で「ピリオド」)。

※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。

※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。

スポンサーリンク