【Python】reモジュールについて【標準ライブラリ】
- reモジュールとは?
- 基本的な使い方
- search() と match() の違い
- findall() と finditer()
- sub() と subn()
- コンパイルされた正規表現
- フラグの活用
- グループ化とキャプチャ
- 先読み・後読み
- split() の活用
- 応用例
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']