サイトアイコン 【TechGrowUp】

Python開発入門18 Python正規表現の基本と応用

はじめに

正規表現(Regular Expressions)は、文字列の検索や置換、パターンマッチングを行うための強力なツールです。Pythonでは、標準ライブラリのreモジュールを使用して正規表現を活用できます。

この記事では、正規表現の基本構文から、Pythonのreモジュールの活用方法、実践的な使用例、注意点までを詳しく解説します。初心者から中級者までのプログラマーが、正規表現のスキルを磨くための参考になる内容です。

Pythonで正規表現を扱うための基礎知識

正規表現とは?

正規表現とは、特定のパターンに一致する文字列を検索、抽出、置換するためのルールを表現する言語です。たとえば、「数字だけを抽出したい」「特定のフォーマットの文字列を見つけたい」といったニーズに応えます。

Pythonでの正規表現の使用方法

Pythonでは、reモジュールをインポートして正規表現を利用します。

基本的な構文

  1. インポート
import re
  1. 主な関数
    • re.match() : 文字列の先頭がパターンに一致するかを確認します。
    • re.search() : 文字列全体を検索し、最初に一致する部分を返します。
    • re.findall() : 文字列全体からすべての一致をリストで返します。
    • re.sub() : 一致する部分を置換します。

Pythonの正規表現で使える主なメタ文字

正規表現の基本構文

メタ文字意味
.任意の1文字a.bは「a」と「b」の間に任意の1文字を許容
^行の先頭に一致^Helloは「Hello」で始まる文字列に一致
$行の末尾に一致world$は「world」で終わる文字列に一致
*0回以上の繰り返しab*は「a」に続く0個以上の「b」に一致
+1回以上の繰り返しab+は「a」に続く1個以上の「b」に一致
?0回または1回の出現ab?は「a」に続く0個または1個の「b」に一致
[]文字クラス(いずれか1文字)[abc]は「a」「b」「c」のいずれかに一致
``または(OR条件)
()グループ化(ab)+は「ab」の1回以上の繰り返しに一致

Pythonのreモジュールの基本的な関数

re.match()

文字列の先頭でパターンが一致するかをチェックします。

import re

text = "Hello, Python!"
result = re.match(r"Hello", text)
if result:
    print("一致しました:", result.group())
else:
    print("一致しませんでした")

re.search()

文字列全体から最初に一致する部分を検索します。

import re

text = "Python is fun!"
result = re.search(r"fun", text)
if result:
    print("一致した文字列:", result.group())

re.findall()

一致するすべての部分をリストで返します。

import re

text = "Email: user@example.com, user2@test.com"
emails = re.findall(r"\w+@\w+\.\w+", text)
print("一致したメールアドレス:", emails)

re.sub()

一致する部分を他の文字列に置換します。

import re

text = "Price: $100"
updated_text = re.sub(r"\$\d+", "REDACTED", text)
print("置換後のテキスト:", updated_text)

Python正規表現の実践例

特定のフォーマットを検証する

メールアドレスが正しい形式かを検証します。

import re

email = "user@example.com"
pattern = r"^\w+@\w+\.\w+$"
if re.match(pattern, email):
    print("有効なメールアドレスです")
else:
    print("無効なメールアドレスです")

日付の抽出

文字列から日付を抽出します。

import re

text = "Today is 2024-11-15. Tomorrow is 2024-11-16."
dates = re.findall(r"\d{4}-\d{2}-\d{2}", text)
print("抽出された日付:", dates)

パスワードの強度チェック

パスワードが強力であるかを確認します。

import re

password = "A1b@C3d!"
pattern = r"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$"
if re.match(pattern, password):
    print("強力なパスワードです")
else:
    print("パスワードが弱すぎます")

正規表現のメリットとデメリット

メリット

  1. 強力な文字列処理機能: 複雑なパターンの検索や置換が簡単に行えます。
  2. 短いコード: 多くの文字列処理を簡潔に記述可能。
  3. 柔軟性: さまざまなデータ形式に対応。

デメリット

  1. 可読性の低下: パターンが複雑になると、理解しづらくなる場合があります。
  2. 学習曲線: 初心者にとっては難解。
  3. デバッグが難しい: 大規模な正規表現はエラーを見つけにくい。

まとめ

Pythonの正規表現は、データ操作や文字列処理を効率化するための非常に強力なツールです。reモジュールの基本を理解し、正規表現のパターン構文を学ぶことで、文字列の検索、置換、抽出を簡単に行えます。

この記事で紹介した基本的な使用例や実践的な活用例を参考に、Pythonプログラミングでの正規表現の活用をぜひ試してみてください。TechGrowUpでは、Pythonに関する役立つ情報を引き続き提供していきます!

モバイルバージョンを終了