正規表現は、文字列のパターンを効率よくマッチングするための強力なツールです。Pythonでは標準ライブラリのreモジュールを使用して正規表現を扱います。特にデータ分析や機械学習の分野では、データの前処理や特徴量作成において欠かせない技術です。本記事では、正規表現の基本的な概念、主要なメタ文字、Pythonにおける使用例を通して、その基礎をわかりやすく解説します。
正規表現とは
正規表現は、文字列の検索や置換、分割などを効率よく行うための文字列パターンを定義する方法です。例えば、「数字で始まる単語」や「特定の形式の日付」のようなルールを記述するのに適しています。
正規表現の利点は次の通りです。
• 柔軟性:多様な文字列パターンを記述できる。
• 効率性:複雑な文字列操作を少ないコードで実現可能。
• 再利用性:一度作成したパターンを繰り返し利用可能。
正規表現のメタ文字一覧
正規表現を理解するためには、メタ文字とその役割を把握することが重要です。以下に、Pythonの正規表現でよく使われるメタ文字をまとめました。
メタ文字 意味 使用例
「.」:任意の1文字(改行を除く) a.b は「aとbの間に1文字」
「^」:文字列の先頭にマッチ ^abc は「abcで始まる文字列」
「$」:文字列の末尾にマッチ xyz$ は「xyzで終わる文字列」
「*」:直前の文字が0回以上繰り返す a* は「aが0回以上」
「+」:直前の文字が1回以上繰り返す a+ は「aが1回以上」
「?」:直前の文字が0回または1回 colou?r は「color」または「colour」
「{n,m}」:直前の文字がn回以上m回以下 a{2,4} は「aa, aaa, aaaa」
「[]」:文字セット。いずれか1文字 [aeiou] は「母音1文字」
「()」:グループ化とキャプチャ (ab)+ は「ab, abab, ababab」
「\」:エスケープまたは特殊文字 . は「.そのもの」
Pythonにおける基本的な使用例
Pythonではreモジュールを使って正規表現を実現します。以下に、基本的な使用例をいくつか示します。
パターンマッチング
文字列が特定のパターンに一致するか確認するには re.match や re.search を使用します。
import re
#文字列の先頭が"abc"か確認
result = re.match(r"^abc", "abcdef")
if result:
print("マッチしました!")
else:
print("マッチしませんでした。")
部分一致の検索
文字列全体ではなく、部分一致を探すにはre.searchを使用します。
import re
text = "I have a cat and a dog."
pattern = r"cat"
if re.search(pattern, text):
print("文字列にcatが含まれています。")
文字列の置換
特定のパターンを別の文字列に置換するにはre.subを使用します。
import re
text = "My phone number is 123-456-7890."
pattern = r"\d{3}-\d{3}-\d{4}"
result = re.sub(pattern, "XXX-XXX-XXXX", text)
print(result) # My phone number is XXX-XXX-XXXX.
文字列の分割
正規表現を使った分割にはre.splitが便利です。
import re
text = "apple, orange; banana"
pattern = r"[,\s;]+"
result = re.split(pattern, text)
print(result) # ['apple', 'orange', 'banana']
特徴量作成での正規表現活用例
正規表現はデータ前処理において、特徴量作成を効率化するためにも活用されます。
日付形式の抽出
import re
text = "Today's date is 2024-12-01, and yesterday was 2024-11-30."
pattern = r"\d{4}-\d{2}-\d{2}"
dates = re.findall(pattern, text)
print(dates) # ['2024-12-01', '2024-11-30']
HTMLタグの除去
Webスクレイピング後のデータクレンジングに役立ちます。
import re
html = "
This is a bold paragraph."
clean_text = re.sub(r"<.*?>", "", html)
print(clean_text) # This is a bold paragraph.
特定パターンのカウント
例えば、文章中の数字の出現回数を数えます。
import re
text = "There are 3 cats, 5 dogs, and 12 birds."
pattern = r"\d+"
count = len(re.findall(pattern, text))
print(f"数字の出現回数: {count}")
正規表現を使う際の注意点
読みやすさを意識:複雑な正規表現は読みづらくなるため、コメントを加えたり、パターンを分割したりするとよいです。
処理速度:長大なテキストや多くのデータに対しては、正規表現がボトルネックになる場合があります。
デバッグ:正規表現が思った通りに動作しない場合、オンラインの正規表現チェッカーを活用すると便利です。
まとめ
正規表現は、データの前処理や特徴量作成の場面で非常に役立つツールです。本記事では、その基本的な概念からPythonでの使い方、特徴量作成の応用例までを紹介しました。正規表現は初めは難しく感じるかもしれませんが、繰り返し練習することで柔軟に使いこなせるようになります。ぜひ積極的に活用してみてください!
さいごまで読んでいただきありがとうございました!
【最新】こちらの記事がおすすめ!