Pythonの正規表現(reモジュール)の基本!パターンマッチングを学ぼう
生徒
「Pythonで、特定の文字だけを探したり、文字のパターンを見つけたりすることってできますか?」
先生
「はい、それには正規表現(せいきひょうげん)という方法があります。Pythonではreモジュールを使って、それが簡単にできますよ。」
生徒
「正規表現って難しそうですが、初心者でも使えるんですか?」
先生
「もちろんです。まずは基本だけをゆっくり学べば大丈夫です。一緒にパターンマッチングの基本を学んでいきましょう!」
1. 正規表現とは?初心者向けにやさしく解説
正規表現とは、文字の並び方のルール(パターン)を使って、文字列の中から特定の文字や形式を探す方法のことです。
たとえば、「メールアドレスを見つけたい」「電話番号だけ抜き出したい」「数字だけ抽出したい」といったときに役立ちます。
Pythonでは、re(アール・イー)というモジュールを使って正規表現を扱います。
2. reモジュールの使い方と基本の関数
reモジュールには、いくつかの便利な関数があります。初心者の方は、まずこの3つを覚えましょう。
re.search():文字列の中にパターンがあるか調べるre.findall():すべてのマッチをリストで返すre.sub():マッチした文字を別の文字に置き換える
では、実際に使ってみましょう。
import re
text = "私の電話番号は090-1234-5678です"
pattern = r"\d{2,4}-\d{2,4}-\d{4}"
result = re.search(pattern, text)
print(result.group())
090-1234-5678
\dは「数字」を表す正規表現の記号です。{2,4}は「2文字から4文字までの繰り返し」を意味します。
3. パターンマッチングとは何か?
パターンマッチングとは、ある文字列が「決められたルール(パターン)」に合っているかを調べることです。
たとえば「abc123」という文字列が、「英字が3つ+数字が3つ」というパターンに合うか調べたりします。
import re
text = "abc123"
pattern = r"[a-z]{3}\d{3}"
if re.fullmatch(pattern, text):
print("マッチしました!")
else:
print("マッチしませんでした。")
マッチしました!
4. よく使う正規表現の記号一覧
はじめての方でも覚えやすいように、よく使う記号を以下にまとめました。
.:なんでも1文字\d:数字(0〜9)\D:数字以外\w:英数字とアンダースコア\W:それ以外\s:空白文字(スペース、タブなど)+:1回以上の繰り返し*:0回以上の繰り返し?:0回または1回[]:中のどれか1文字{n}:n回の繰り返し
5. メールアドレスを見つける例
正規表現を使えば、文章の中からメールアドレスだけを見つけることも可能です。
import re
text = "お問い合わせは info@example.com までお願いします。"
pattern = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
result = re.search(pattern, text)
print(result.group())
info@example.com
このように、複雑に見えるパターンでも、分解して覚えれば使いこなせるようになります。
6. 文字の置き換え(re.subの使い方)
文章の中の文字を別の文字に一括で置き換えることもできます。
たとえば、全角の数字を半角に置き換えるなどの処理が可能です。
import re
text = "電話:090-1234-5678、FAX:03-9876-5432"
result = re.sub(r"\d{2,4}-\d{2,4}-\d{4}", "非公開", text)
print(result)
電話:非公開、FAX:非公開
7. 正規表現の使い方を練習しよう
実際に自分で文字列を作って、どんな文字がマッチするのかを試してみましょう。文字列を変更しながら何度も実行することで、自然に身についてきます。
初心者の方は、まずは re.search() や re.findall() を中心に、パターンマッチングの感覚をつかむことから始めましょう。
まとめ
Pythonの正規表現は、文字列の中から必要な情報を抽出したり、特定のルールに合う文字だけを見つけたり、文章を効率よく加工したりするために欠かせない重要な機能です。正規表現というと難しい印象を持たれがちですが、実際には「文字のルールを決めて検索する」というシンプルな考え方で構成されており、基本的な記号と関数の使い方を覚えれば、初心者でも十分に活用できます。今回の記事では、reモジュールの基本的な関数であるre.search()、re.findall()、re.sub()の使い方や、よく使われる正規表現の記号、そしてパターンマッチングの基本的な考え方を紹介してきました。これらの知識を身につけることで、文章中から電話番号やメールアドレスを抽出したり、数字だけを取り出して加工したり、特定のパターンを満たす文字列を判定したりと、文字処理の幅が大きく広がります。 正規表現を使いこなすメリットは、ただ単に文字を探すだけにとどまりません。複雑な条件の検索や抽出を短いコードで表現できるため、処理を簡潔に書けるだけでなく、効率面でも大きな効果があります。もし正規表現を使わずに同じ処理を行おうとすると、多くの条件分岐やループが必要になり、コードが長く読みづらいものになってしまうことも珍しくありません。逆に、正規表現を理解しておけば、数行のシンプルなコードで複雑な条件を表現でき、可読性と保守性が高いプログラムを書くことができるようになります。また、Web開発やデータ分析、ログ解析、テキスト処理など、多くの分野で必要とされる技術でもあるため、正規表現を学んでおくことは、Pythonを本格的に使っていく上で大きな強みになります。 もちろん、正規表現は一度にすべてを覚える必要はなく、必要に応じてパターンを調べながら使うことで、自然と表現が身についていきます。最初は数字を表す \d や、文字の繰り返しを表す +・* といった基本記号だけでも十分に多くの場面で活躍します。そして、文章の置換や複雑な抽出を行いたくなったときに、少しずつ発展的な記号を覚えていけば無理なく習得できます。今回の記事で紹介したメールアドレスの抽出や電話番号の判定などは、現実の処理で非常に多く使われるパターンで、実務にそのまま応用できる内容です。まずは簡単な検索から試し、徐々にパターンを増やしながら使い慣れていきましょう。
サンプルコード:検索・抽出・置換をまとめて試そう
import re
text = """
お問い合わせは info@example.com までお願いします。
電話番号は 090-1234-5678 です。
不要な情報を消して、必要な情報だけ抽出したいと考えています。
"""
# メールアドレスと電話番号を抽出
email_pattern = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
phone_pattern = r"\d{2,4}-\d{2,4}-\d{4}"
emails = re.findall(email_pattern, text)
phones = re.findall(phone_pattern, text)
# 電話番号を非公開に置換
sanitized = re.sub(phone_pattern, "非公開", text)
print("メールアドレス一覧:", emails)
print("電話番号一覧:", phones)
print("置換結果:\\n", sanitized)
このサンプルコードでは、正規表現を使ったパターンマッチング、抽出、置換の一連の処理を体験できます。メールアドレスと電話番号をそれぞれ抽出するパターンを使い分け、さらにre.sub()で文字列の一部を置き換えています。実際の業務や日常のスクリプトでも同じような処理を行う機会は多く、この基礎を理解しておくと、より高度な加工処理にもスムーズに進めます。慣れてきたら、自分自身で異なるパターンを作り、さまざまな文字列に対して試してみることで、理解が深まり応用力も育っていきます。
生徒
「正規表現って難しいイメージがあったけど、基本だけならすごく使いやすいですね!数字を探したりメールアドレスを取り出したりできるのが面白かったです。」
先生
「基本パターンだけでも十分にいろいろな処理ができますよ。最初はよく使う記号を覚えて、慣れてきたら複雑なパターンにも挑戦していくと自然に身につきます。」
生徒
「re.search()やre.findall()も分かりやすかったです。検索と抽出の使い分けができると便利ですね。」
先生
「その通りです。文字列処理はPythonでよく使う場面が多いので、今回覚えた内容は必ず役に立ちます。まずは今回の記事を参考に、いろいろな文字列で試してみてください。」
生徒
「はい!自分でもパターンを作って試してみます!」