【Python】reモジュールについて【標準ライブラリ】

【Python】reモジュールについて【標準ライブラリ】

reモジュールとは?

Pythonのreモジュールは、正規表現を扱うための標準ライブラリです。文字列の検索、置換、パターンマッチングなどを効率的に行うことができます。

基本的な使い方

まずは簡単な例を見てみましょう。

import re

pattern = r"hello"
text = "hello world"

if re.search(pattern, text):
    print("マッチしました!")

このコードでは、文字列 "hello world" の中に "hello" が含まれているかを確認しています。

search() と match() の違い

re.search() は文字列全体を検索し、最初に見つかった部分を返します。一方、re.match() は文字列の先頭でのみマッチを確認します。

import re

text = "hello world"

# search() はどこでもマッチを探す
result = re.search(r"world", text)
print(result)  # 

# match() は先頭のみチェック
result = re.match(r"world", text)
print(result)  # None

findall() と finditer()

findall() はマッチしたすべての文字列をリストで返します。finditer() はイテレータを返します。

import re

text = "apple orange apple banana apple"
pattern = r"apple"

# findall() の場合
matches = re.findall(pattern, text)
print(matches)  # ['apple', 'apple', 'apple']

# finditer() の場合
matches = re.finditer(pattern, text)
for match in matches:
    print(match.span())  # (0, 5), (13, 18), (26, 31)

sub() と subn()

sub() はマッチした部分を置換します。subn() は置換後の文字列と置換の回数を返します。

import re

text = "hello world hello"
new_text = re.sub(r"hello", "hi", text)
print(new_text)  # "hi world hi"

result = re.subn(r"hello", "hi", text)
print(result)  # ('hi world hi', 2)

コンパイルされた正規表現

頻繁に使うパターンは re.compile() を使ってコンパイルすると効率的です。

import re

pattern = re.compile(r"\d+")  # 数字を探す
text = "ID: 12345, Code: 67890"

matches = pattern.findall(text)
print(matches)  # ['12345', '67890']

フラグの活用

フラグを使うと、検索を柔軟にできます。

import re

text = "Hello WORLD hello"

# 大文字小文字を無視
pattern = re.compile(r"hello", re.IGNORECASE)
matches = pattern.findall(text)
print(matches)  # ['Hello', 'hello']

グループ化とキャプチャ

正規表現のグループ化を利用すると、特定の部分を抽出できます。

import re

text = "John Doe, Age: 25"
match = re.search(r"(\w+) (\w+), Age: (\d+)", text)

if match:
    print(match.group(1))  # John
    print(match.group(2))  # Doe
    print(match.group(3))  # 25

先読み・後読み

先読み(Lookahead)と後読み(Lookbehind)を使うと、特定の条件を満たす部分を抽出できます。

import re

text = "Price: $100, Discounted: $80"

# $ の後に続く数字を取得
matches = re.findall(r"(?<=\$)\d+", text)
print(matches)  # ['100', '80']

split() の活用

正規表現を使った文字列の分割も可能です。

import re

text = "apple, orange; banana grape"
result = re.split(r"[,;] ", text)
print(result)  # ['apple', 'orange', 'banana grape']

応用例

メールアドレスの抽出や電話番号のフォーマット変換など、実践的な例を紹介します。

import re

text = "Contact: example@email.com, support@domain.org"
matches = re.findall(r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}", text)
print(matches)  # ['example@email.com', 'support@domain.org']

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です