#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専用の自動化ツールをオーダーメイドで作成しています。気になる方はこちらをご覧ください。
コメント
コメントを投稿