🐍 Pythonの「正規表現」が使えると、コードの幅が一気に広がる
「文章の中から電話番号だけを抜き出したい」「金額の部分だけを取り出したい」「パスワードが英数字混在のルールを満たしているかチェックしたい」——こんな処理を、たった数行で書けてしまう魔法のような道具が正規表現です。✨
正規表現は最初こそ記号だらけで難しく見えますが、基本パターンを押さえれば、文字列処理が驚くほどスマートに書けるようになります。今日からあなたのPythonコードに「文字列を自在に操る力」を加えていきましょう。💪
📘 正規表現とは?「文字列のパターンを表現する方法」
正規表現とは、文字列をパターンとして表現する方法のこと。たとえば「半角数字だけで作られた文字列」と言われたら、123や0001など、さまざまな文字列が思い浮かびますよね。こうした“ある共通の特徴を持った文字列の集まり”を、特殊な記号を使って表現するのが正規表現です。
使いどころは無数にあります。たとえば、長い文章の中から「090・080・070で始まり、その後に数字が8桁続く」携帯電話番号だけを抽出したい場面。普通に書こうとすると条件分岐だらけになってしまう処理が、正規表現を使えばたった1行のパターンで済んでしまいます。🚀
🔤 まず覚えたい正規表現の基本パターン
角括弧 [ ] で「集合の中の一文字」を表す
角括弧の中に文字を並べると、「そのどれか一文字」という意味になります。
- 📌
[abc]:a, b, c のいずれか一文字 - 📌
[a-z]:小文字アルファベットの一文字 - 📌
[0-9]:半角数字の一文字 - 📌
[a-zA-Z]:英字(大文字小文字どちらも)の一文字 - 📌
[^a-z]:先頭に^を入れると「その集合以外の一文字」
特殊記号で「位置」と「任意の文字」を表す
- 📌
.:改行以外の任意の一文字(例:abc.は abcd や abc0 にマッチ) - 📌
^:文字列の先頭(例:^id[0-9]は id0, id9 にマッチ) - 📌
$:文字列の末尾(例:[0-9]\.$は「数字+ピリオド」で終わる文字列にマッチ)
繰り返しを表す量指定子
- 📌
*:直前の文字を0回以上繰り返す - 📌
+:直前の文字を1回以上繰り返す - 📌
?:直前の文字を0回または1回 - 📌
{n}:直前の文字をn回繰り返す(例:[a-z]{3}は xyz にマッチ) - 📌
{n,m}:n回以上m回以下の繰り返し - 📌
|:「AまたはB」を表す(例:[0-9]|[a-z]は数字または小文字一文字)
これらを今すぐ完璧に暗記する必要はありません。「正規表現 一覧」で検索すれば表がたくさん出てきますし、実務でも調べながら使うのが普通です。大切なのは“どんなことができるか”を知っておくことです。📝
🐍 Pythonで正規表現を使う:reモジュールの基本
Pythonで正規表現を扱うには、標準モジュールの re を使います。インポートして関数を呼び出すだけ。シンプルです。
re.match:文字列の先頭がパターンに一致するかを調べる
import re
m = re.match(r"[0-9]{3}", "09033さん")
if m:
print(m.group()) # マッチした文字列を取り出す
print(m.span()) # (開始インデックス, 終了インデックス)
第一引数に正規表現(先頭に r を付けた「raw文字列」)、第二引数に調べたい文字列を指定します。マッチすればマッチオブジェクトが返り、.group() で一致部分、.span() でインデックス範囲を取得できます。マッチしなければ None が返るので、if文で判定するのが定石です。👍
re.search:文字列のどこかにパターンがあるかを調べる
import re
m = re.search(r"[1-9][0-9]*", "この洋服は300円です")
print(m.group()) # 300
match は先頭限定でしたが、search は文字列のどこか一部にマッチすればOK。文章中から金額だけを抜き出したいときなどに活躍します。
re.findall:マッチする全ての部分をリストで取得
import re
result = re.findall(r"[0-9]+", "リンゴ100円、バナナ350円、メロン3000円")
print(result) # ['100', '350', '3000']
「マッチするものを全部まとめて取り出したい」ときに便利。戻り値はリストなので、そのままfor文に渡せます。
re.fullmatch:文字列全体がパターンに一致するか
入力チェック(メールアドレスや電話番号のバリデーションなど)で重宝する関数です。
🛡️ エスケープを忘れずに:特殊文字をそのまま検索したいとき
$ や .、+ など、正規表現で意味を持つ記号を“ただの文字”として扱いたいときは、前に \(バックスラッシュ)を付けてエスケープします。
import re
# "$100" の "$100" 部分を抜き出したい
m = re.search(r"\$[0-9]+", "この洋服は$100です")
print(m.group()) # $100
エスケープが必要な主な文字は、. ^ $ * + ? ( ) [ ] { } | \ など。正規表現は他のプログラミング言語やエディタの検索バーでも共通して使えるので、一度覚えればずっと使える資産になります。💎
📚 正規表現&Pythonの理解を加速する厳選書籍&ツール
正規表現は「習うより慣れろ」の世界。手元に1冊あると、つまずいたときに迷子になりません。レベルと用途に合わせて選べる5点をピックアップしました。
🌱 まずはPython全体を体系的に:『スッキリわかるPython入門』
文法から制御構文、文字列操作まで体系的に学べる定番入門書。正規表現に進む前の土台づくりに最適です。
🤖 正規表現の実用例の宝庫:『退屈なことはPythonにやらせよう』
ログ解析・スクレイピング・ファイル名一括変換など、正規表現が大活躍する場面を実例ベースで学べます。「学んだ知識を即仕事に変えたい人」にド直球の1冊。
📖 一歩踏み込んだPythonの作法:『Python実践入門』
標準モジュールの使いどころや、Pythonらしい書き方を学べる本。re モジュールを含む標準ライブラリの活用法が深まります。
🚀 中級〜上級へ進みたい人へ:『Effective Python 第2版』
「動くコード」から「保守しやすい良いコード」へ。文字列処理や正規表現を業務コードに組み込むときの設計指針が学べます。
⌨️ 長時間コーディングを支えるキーボード
正規表現を試行錯誤する時間はとにかくタイピング量が多くなりがち。指への負担を減らす静音・低背の高品質キーボードがあると、学習継続のハードルがぐっと下がります。
❓ よくある質問(FAQ)
🤔 Q1. 正規表現の記号、全部覚える必要ある?
いいえ、覚えなくてOKです。プロでも全部は暗記していません。「こういうことができる」と知っておき、必要なときに調べて使う——これが現場のスタンダードです。📚
🤔 Q2. matchとsearchの違いは?
match は文字列の先頭がパターンに一致するかを調べ、search は文字列のどこかに一致部分があるかを調べます。文章中から特定の情報を抜き出したいときは search や findall を使うのが基本です。
🤔 Q3. 正規表現の前に付ける「r」って何?
「raw文字列」と呼ばれる書き方で、文字列の中の \(バックスラッシュ)をエスケープ文字として解釈せず、そのまま使うための記法です。正規表現では \ を頻繁に使うので、ほぼ毎回 r"..." を付けるのが安全です。
🤔 Q4. ネットで見つけた正規表現をコピペで使ってもいい?
動作確認のうえで使うなら問題ありません。ただし、その正規表現が何をしているかは必ず理解してから使いましょう。意図しないマッチや漏れがあると、バグの温床になります。⚠️
🤔 Q5. Python以外でも同じ正規表現は使える?
基本的にはYesです。正規表現はJavaScript、Ruby、PHP、Java、エディタの検索機能などでも共通して使えます(細かい方言の違いはあります)。一度習得すれば、エンジニアとして一生モノのスキルになります。✨
🎯 まとめ:正規表現は「コードの幅」を一気に広げる武器
正規表現は最初こそ難しく見えますが、[ ]・.・*・+・?・{n} といった基本パターンを押さえ、Pythonの re モジュール(match / search / findall)の使い方を覚えれば、文字列処理がぐっとスマートに書けるようになります。
大切なのは「丸暗記」ではなく、“こういう処理が正規表現で書ける”という引き出しを持つこと。そして実際に手を動かして、自分のコードに組み込んでみることです。次にログを眺めるとき、データを整形するとき、入力チェックを書くとき——あなたの選択肢はきっと何倍にも増えているはずです。🚀










































コメント