正規表現(regexまたはregexp)は、文字列内のパターンマッチングのための強力なツールです。Pythonのre
モジュールは、正規表現操作のための堅牢な機能を提供しており、ワイルドカードが重要な役割を果たします。この記事では、様々な文字列操作タスクにおいて、re.sub()
関数でワイルドカードを効果的に使用する方法を解説します。
目次
ワイルドカードを使用した基本的な正規表現置換
re.sub()
関数は、正規表現置換の基本です。構文はre.sub(pattern, replacement, string, count=0, flags=0)
です。pattern
は正規表現、replacement
は置換文字列、string
は入力、count
は置換の制限、flags
はマッチング動作を変更します。ワイルドカードはpattern
の柔軟性を劇的に向上させます。
文字列内のすべての母音を「X」に置き換えてみましょう。
import re
text = "Hello, World!"
replaced_text = re.sub(r"[aeiou]", "X", text, flags=re.IGNORECASE)
print(f"Original: {text}")
print(f"Replaced: {replaced_text}")
[aeiou]
は、任意の母音にマッチするワイルドカード文字セットです(re.IGNORECASE
により大文字と小文字を区別しません)。
高度なワイルドカードの使用と限定子
re.sub()
は複雑なワイルドカードをサポートします。1つ以上の数字の連続を「NUMBER」に置き換えてみましょう。
import re
text = "My phone number is 123-456-7890 and my zip code is 90210."
replaced_text = re.sub(r"d+", "NUMBER", text)
print(f"Original: {text}")
print(f"Replaced: {replaced_text}")
d+
は1つ以上の数字にマッチします(d
は数字にマッチし、+
は1つ以上の繰り返しを表します)。
主要なワイルドカードをまとめた表を以下に示します。
ワイルドカード | 説明 |
---|---|
. |
改行文字以外の任意の文字にマッチします。 |
* |
先行する要素の0回以上の出現にマッチします。 |
+ |
先行する要素の1回以上の出現にマッチします。 |
? |
先行する要素の0回または1回の出現にマッチします。 |
[] |
文字セットを定義します(例:[abc] )。 |
[^] |
否定された文字セットを定義します(例:[^abc] )。 |
() |
キャプチャグループを作成します。 |
|
特殊文字をエスケープします(例:. はリテラルのドットにマッチします)。 |
複雑なパターンのためのワイルドカードの組み合わせ
ワイルドカードを組み合わせることで、強力なパターンを作成できます。「a」で始まり、任意の文字が続く単語を置き換えてみましょう。
import re
text = "A apple a day keeps the doctor away."
replaced_text = re.sub(r"aw*", "WORD", text, flags=re.IGNORECASE)
print(f"Original: {text}")
print(f"Replaced: {replaced_text}")
aw*
は、「a」に続いて0個以上の単語文字(w
)が続くパターンにマッチします。
実例:メールアドレスと電話番号の抽出
re.sub()
は、複雑なパターン処理に優れています。メールアドレスを「EMAIL」に置き換えてみましょう。
import re
text = "Contact us at [email protected] or [email protected]."
replaced_text = re.sub(r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}", "EMAIL", text)
print(f"Original: {text}")
print(f"Replaced: {replaced_text}")
この正規表現は、一般的なメールアドレスの形式にマッチします。
結論
re.sub()
関数は、正規表現のワイルドカードと組み合わせることで、Pythonでの文字列操作のための柔軟で効率的な方法を提供します。これらのテクニックを習得することは、テキスト処理やデータクレンジングのタスクに役立ちます。意図しない置換を避けるためには、正規表現の構築に注意することが重要です。効果的な文字列操作には、実験とワイルドカードのニュアンスの理解が不可欠です。