#22 Pythonで学ぶ正規表現の基本

はじめに

「特定のパターンに一致する文字列だけを取り出したい」「電話番号やメールアドレスの形式をチェックしたい」。こういった作業を手作業でやろうとすると、if文とfor文だらけの複雑なコードになりがちです。そんなときに役立つのが「正規表現(せいきひょうげん)」です。正規表現とは、文字列のパターンを記号の組み合わせで表現し、それに一致する部分を検索・置換・抽出するための仕組みです。Pythonでは標準ライブラリのreモジュールを使うだけで、正規表現を簡単に扱うことができます。この記事ではPythonでの正規表現の基本を、初心者の方にも分かりやすく解説します。

reモジュールを使う準備

Pythonで正規表現を使うには、まずファイルの先頭でreモジュールをインポートします。

import re

これだけで準備は完了です。外部ライブラリを別途インストールする必要はなく、Pythonをインストールした時点で最初から使える「標準ライブラリ」に含まれているため手軽です。

基本的な検索:search関数とmatch関数

文字列の中にパターンが含まれているかを調べるには、re.search()を使います。

import re

text = "私の電話番号は090-1234-5678です"
result = re.search(r"\d{2,4}-\d{2,4}-\d{4}", text)

if result:
    print("見つかりました:", result.group())
else:
    print("見つかりませんでした")

ここで登場する\dは「数字1文字」を表す記号で、{2,4}は「直前のパターンが2〜4回繰り返される」ことを意味します。つまり\d{2,4}-\d{2,4}-\d{4}は電話番号らしいパターンを表しています。一致した部分はresult.group()で取り出せます。

似た関数にre.match()がありますが、こちらは文字列の先頭からの一致しか調べません。文字列のどこかにパターンが含まれるか調べたい場合はsearch()を使う、と覚えておきましょう。

rの意味:生文字列(raw string)に注意

先ほどのコード例で、パターンの前にrという文字が付いていたことに気づいたでしょうか。これは「生文字列(raw string)」と呼ばれるPython特有の書き方です。通常の文字列では\nが改行として解釈されてしまい、正規表現で使いたい\dや\sのような記号が意図通りに扱われないことがあります。r"..."のように文字列の前にrを付けると、バックスラッシュをそのままの文字として扱ってくれます。正規表現のパターンを書くときは基本的にrを付ける習慣をつけておくと安全です。これは他の言語ではあまり見られないPythonならではの書き方です。

すべての一致を取得する:findall

文字列の中にパターンが複数含まれている場合、それらをすべてリストとして取得したいこともあります。そんなときはre.findall()が便利です。

text = "リンゴ100円、バナナ200円、ミカン150円"
prices = re.findall(r"\d+", text)
print(prices)  # ['100', '200', '150']

\d+の+は「直前のパターンが1回以上連続する」ことを表す記号です。連続する数字のかたまりをすべて拾い出し、リストとして返してくれます。

置換を行う:sub関数

パターンに一致した部分を別の文字列に置き換えたいときはre.sub()を使います。

text = "電話:090-1234-5678"
masked = re.sub(r"\d{4}$", "****", text)
print(masked)  # 電話:090-1234-****

$は「文字列の末尾」を表す記号で、末尾の4桁の数字だけをマスク処理しています。個人情報の一部を隠す際などによく使われる、実務的なテクニックです。

つまずきやすいポイント

まず、パターンに一致しなかった場合、re.search()やre.match()はNoneを返します。この結果を確認せずにresult.group()を呼び出すとエラーになるため、必ずif result:のように一致したかをチェックしましょう。また、.や*、(といった記号は正規表現の中で特別な意味を持ちます。記号そのものを検索したい場合は\.のようにバックスラッシュを付けて「エスケープ」する必要があります。複雑なパターンを一度に書こうとすると読みにくくなりがちなので、小さいパターンから少しずつ組み立てて、都度動作確認しながら進めるのがおすすめです。

まとめ

正規表現は、文字列の検索・抽出・置換を効率的に行うための強力な道具です。Pythonではreモジュールをインポートするだけで使い始められ、search()・findall()・sub()といった基本的な関数を覚えるだけでも、文字列処理がぐっと楽になります。最初は記号の意味を覚えるのが大変かもしれませんが、少しずつ試しながら使えば自然と身につきます。ぜひ自分のプログラムに正規表現を取り入れてみてください。

関連記事


本ページはプロモーションを含みます。

参考書籍(PR)

Pythonをもっと学びたい方には「スッキリわかるPython入門 第2版」がおすすめです。


PR

コードを書かずに自動化したい方へ

「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動くWindows専用の自動化ツールをオーダーメイドで作成しています。気になる方はこちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本