
Pythonで文字列処理をする際に欠かせないのが、正規表現(Regex)を扱うための re
モジュールです。
検索、置換、抽出、パターンマッチなど、柔軟な文字列処理を可能にするこのモジュールは、ログ解析やデータクレンジング、Webスクレイピングでも頻繁に使われます。
この記事では、Pythonの re
モジュールの基本的な使い方から、主要メソッド、活用シーン、注意点まで、初心者にもわかりやすく丁寧に解説します。
re モジュールとは?
Python標準ライブラリに含まれている「正規表現モジュール」です。
1 2 |
import re |
と書くことで、文字列検索や置換などの正規表現機能が使えるようになります。
正規表現とは、文字列のパターンを表現するための「特殊な書き方」です。
たとえば「数字だけにマッチ」「abcから始まる文字列」などを表現できます。
具体例①:文字列から特定のパターンを抽出
たとえば、文章の中からメールアドレスだけを抽出したい時は下記のように使います。
1 2 3 4 5 6 7 8 9 |
import re text = "お問い合わせは info@example.com までご連絡ください" pattern = r"\w+@\w+\.\w+" result = re.search(pattern, text) if result: print(result.group()) # info@example.com |
ここで使われているのは以下の要素です:
\w+
:英数字の1文字以上を表す@
:アットマークそのもの\.
:ドット(.
は正規表現で「任意の1文字」を意味してしまうため、バックスラッシュでエスケープが必要)search()
:文字列の中から「最初にマッチした1つだけ」を取得group()
:実際にマッチした文字列を取り出す
この例では 最初に見つかったメールアドレス1件だけ を取得しています。
もし複数のメールアドレスが含まれている場合は、re.findall()
を使うとすべて取得できます。
具体例②:文字列の一括置換
正規表現を使えば、特定のパターンを まとめて置換 する処理も簡単です。
例えば「数字をすべて●に置き換える」というマスキング処理は以下のように書けます。
1 2 3 4 5 6 |
import re text = "パスワード1234は危険です" masked = re.sub(r"\d+", "●●●●", text) print(masked) # パスワード●●●●は危険です |
ここでのポイント:
\d+
:数字(1文字以上)を意味する正規表現sub()
:パターンに一致した部分を指定文字列に置き換える
この例では「1234」という数字がすべて「●●●●」に置き換えられています。
もし「数字の桁数に応じて●の数を変えたい」なら、置換部分を "●"
にし、re.sub(r"\d", "●", text)
のようにすれば 1文字ずつマスク することも可能です。
主要なメソッド一覧
re
モジュールにはさまざまな関数が用意されていますが、実務で特によく使うのは次のメソッドです。
それぞれの役割と、どんな場面で使うのかを簡単にまとめました。
メソッド名 | 機能 | よく使う場面 |
---|---|---|
re.search() |
最初のマッチを返す | 文字列中に該当パターンがあるか確認 |
re.match() |
先頭からマッチを確認 | パターンが先頭にあるか調べたいとき |
re.findall() |
すべてのマッチをリストで取得 | 一括抽出(メール、電話など) |
re.finditer() |
イテレータで全マッチを取得 | マッチした位置など詳細情報が必要なとき |
re.sub() |
文字列の置換 | 検出したパターンをマスキング |
re.split() |
正規表現で分割 | カンマやスペース以外での区切り |
re.compile() |
パターンを事前にコンパイル | パフォーマンス改善、複数回利用時 |
これらを理解して使い分けることで、文字列処理を効率よく柔軟に実装できます。
例えば、簡単なチェックには search
、一括抽出には findall
、置換には sub
を使うなど、用途ごとに最適なメソッドを選ぶことが大切です。
正規表現のよく使うパターン一覧
Python の正規表現でよく使われる記号や構文をまとめました。
コードを書く時にパッと参照できるようブックマークしておくのがおすすめです!
パターン | 意味 | 例 |
---|---|---|
. |
任意の1文字(改行を除く) | a.b は "acb" にマッチ |
^ |
文字列の先頭 | ^Hello は "Hello world" にマッチ |
$ |
文字列の末尾 | end$ は "the end" にマッチ |
* |
直前の文字が0回以上繰り返される | lo* は "looong" にマッチ |
+ |
直前の文字が1回以上繰り返される | lo+ は "looooong" にマッチ |
? |
直前の文字が0回または1回 | colou?r は "color" と "colour" にマッチ |
{n} |
n回繰り返し | \d{4} は4桁の数字にマッチ |
{n,m} |
n〜m回の繰り返し | \d{2,4} は2〜4桁の数字 |
[] |
いずれか1文字にマッチ | [aeiou] は母音にマッチ |
[^] |
指定以外の1文字にマッチ | [^0-9] は数字以外にマッチ |
\d |
数字と一致([0-9]) | \d+ は連続する数字にマッチ |
\D |
非数字と一致 | \D+ は数字以外にマッチ |
\w |
英数字またはアンダースコア | \w+ は単語にマッチ |
\W |
非単語文字(空白や記号など) | \W+ は記号やスペースにマッチ |
\s |
空白文字(スペース、タブなど) | \s+ は連続する空白にマッチ |
\S |
空白以外の文字 | \S+ は非空白文字列にマッチ |
| | OR条件(いずれかに一致) | cat|dog は、「cat または dog」のどちらかにマッチ |
() |
グループ化またはキャプチャ | (\d+)-(\d+) で電話番号の区切りを分ける |
※バックスラッシュを使うパターン(\d
, \s
など)は、Pythonコード内では r"..." のように「raw文字列」で書くのが基本です。
たとえば、\d{4}
は「4桁の数字」、^Hello
は「Helloで始まる文字列」にマッチします。
複雑なパターンも、上記の記号を組み合わせることで表現できます。
活用シーン
正規表現は「複雑な文字列処理を簡潔に書ける」ことが最大の強みです。
そのため、Pythonの re
モジュールは次のような実務シーンで非常によく使われます。
- フォーム入力のバリデーション(メールアドレスや電話番号のチェック)
- Webスクレイピング(HTMLから特定パターンのデータを抽出)
- ログ解析(IPアドレスやエラーメッセージの抽出)
- 文字列のクリーニング(不要な記号やスペースの除去)
- ファイル名・パスのフィルタリング(特定拡張子だけ取得など)
特に「入力チェック」や「データ抽出」では、正規表現があるだけで処理をシンプルに書けるようになります。
日常的な業務でも活躍する場面が多いため、基本的な書き方を知っておくだけでも大きな武器になります。
注意点
正規表現は便利ですが、いくつかの落とし穴もあります。
特に初心者がつまずきやすいポイントを整理しました。
- 正規表現の構文は非常に強力ですが、複雑になると読みづらくバグの元になります。
- 初めて書くときは、regex101 のような正規表現可視化ツールの活用がおすすめです。
- Pythonの raw文字列(
r""
)を使わないと、バックスラッシュのエスケープで混乱しやすくなります。
シンプルなパターンから少しずつ応用していくと、バグを避けながら実務で安全に活用できます。
まとめ
Python の re
モジュールを使えば、文字列に対して強力で柔軟なパターン処理が可能になります。
re.search()
:1件だけ見つけるre.findall()
:すべて見つけるre.sub()
:一致部分を置換re.match()
:先頭からマッチ
正規表現の構文と一緒に使いこなすことで、データ処理の効率が大幅にアップします。
初めての方はまず、簡単なパターン(数字やメールアドレス)から試して、徐々に応用していくのがおすすめです。