Categories: python

Pythonの正規表現入門:reモジュールで文字列処理を自在に操る!

Pythonで文字列を扱う際、「この形式の文字列だけ抽出したい」「一部の文字だけを置き換えたい」といった場面はよくあります。そんなときに威力を発揮するのが「正規表現」です。Pythonでは標準ライブラリのreモジュールを使うことで、強力かつ柔軟な文字列処理が可能になります。本記事では、Pythonにおける正規表現の基本から応用まで、丁寧に解説していきます。これを読めば、正規表現の基礎がしっかり身につくでしょう。


正規表現とは?

正規表現(Regular Expression)は、文字列のパターンを表現するための特別な記述方法です。
たとえば、メールアドレスや郵便番号、電話番号のような「一定のルールを持った文字列」を検出したり抽出したりする際に使われます。

正規表現はPythonだけでなく、多くのプログラミング言語やツールで採用されている共通の技術です。Pythonではreという標準モジュールを使って扱います。


reモジュールの基本的な使い方

まずは、Pythonで正規表現を使うために必要なreモジュールの基本的な関数を紹介します。

import re

match():先頭がマッチするか確認

result = re.match(r'\d+', '123abc')
print(result.group()) # 結果:123

match()は、文字列の先頭がパターンに一致するかどうかを確認します。

search():全体から最初にマッチしたものを探す

result = re.search(r'\d+', 'abc123def456')
print(result.group()) # 結果:123

search()は文字列全体を検索し、最初にマッチした部分を返します。

findall():すべてのマッチをリストで返す

result = re.findall(r'\d+', 'abc123def456ghi789')
print(result) # 結果:['123', '456', '789']

findall()は、文字列中のすべてのマッチをリストで返します。

sub():文字列を置換する

result = re.sub(r'\d+', '###', 'abc123def456')
print(result) # 結果:abc###def###

sub()は、正規表現に一致した部分を他の文字列に置換します。


よく使う正規表現パターン一覧

以下に、正規表現でよく使われるパターンを紹介します。

パターン意味
\d数字(0-9)\d+ → 数字の連続
\w英数字(a-z, A-Z, 0-9, _)\w+ → 単語
.任意の1文字a.b → acb, a1b など
^行頭を意味する^abc → abcで始まる行
$行末を意味するxyz$ → xyzで終わる行
[]文字クラス[a-z] → 小文字1文字
``または(OR)
*直前の文字の0回以上の繰り返しa* → “”, “a”, “aaa”など
+直前の文字の1回以上の繰り返しa+ → “a”, “aa”など
{n,m}n〜m回の繰り返しa{2,4} → “aa”, “aaa”, “aaaa”

実用例:メールアドレスを抽出する

次は、具体的な実用例として「文字列の中からメールアドレスを抽出する」方法です。

text = "お問い合わせは info@example.com までお願いします。"
pattern = r'[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+'
email = re.search(pattern, text)
if email:
print(email.group()) # 結果:info@example.com

このパターンは、メールアドレスの基本的な形式にマッチします。
業務やデータ分析で非常によく使われるテクニックです。


実用例:日付形式の抽出(YYYY-MM-DD)

text = "登録日は2025-04-13です。"
pattern = r'\d{4}-\d{2}-\d{2}'
date = re.search(pattern, text)
if date:
print(date.group()) # 結果:2025-04-13

{4}{2}のように、繰り返し回数を指定することで特定の形式にマッチさせることができます。


正規表現のコンパイルとパフォーマンス向上

繰り返し使うパターンは、re.compile()で事前にコンパイルしておくことでパフォーマンスを上げられます。

pattern = re.compile(r'\d+')
result = pattern.findall('123abc456def')
print(result) # 結果:['123', '456']

re.compile()で作成したパターンオブジェクトは、match(), search(), findall()などと同様のメソッドを持っています。


注意点:エスケープ文字とr文字列

正規表現では \ を多く使うため、Pythonの文字列でそのまま書くと混乱しやすいです。
そのため、文字列の前に r を付けて「生(raw)文字列」として記述するのが一般的です。

pattern = r'\d+'  # これが正しい

r'\d+'とすることで、Pythonが\dをエスケープしようとせず、正規表現そのままの意味として解釈してくれます。


正規表現で文字列処理をもっと自由に

Pythonの正規表現は強力で、複雑な文字列のパターンマッチや変換を柔軟に行えます。
ログファイルの解析、データクレンジング、フォームのバリデーションなど、さまざまな場面で活用されています。

最初は覚えることが多く感じられますが、基本のパターンをしっかり理解していれば徐々に応用できるようになります。
まずはre.search()re.findall()など、使いやすい関数から試してみると良いでしょう。


まとめ

  • Pythonで正規表現を使うにはreモジュールを利用する
  • match(), search(), findall(), sub()などの関数を目的に応じて使い分ける
  • \d, \w, ^, $, +, *などの記号を理解するとパターン作成がしやすくなる
  • 実際の業務でよく使われる例として「メールアドレス」や「日付」の抽出を紹介
  • 頻出パターンはre.compile()でコンパイルして再利用可能にすると効率が良い
upandup

Web制作の記事を中心に、暮らし、ビジネスに役立つ情報を発信します。 アフィリエイトにも参加しています。よろしくお願いいたします。

Recent Posts

C#でテキストファイルに書き込む方法を徹底解説!

プログラムからテキストファイル…

14時間 ago

比例と反比例を完全マスター!中学生にもわかる関数の基礎入門

数学の世界において「比例」と「…

14時間 ago

中学生でもわかる!一次方程式の解き方を丁寧に解説

数学の中でも「方程式」は、避け…

14時間 ago