メニュー
yu-to
管理者
本ブログを運営しているyu-toと申します。

高校数学の解説や公務員試験問題の解説、データサイエンスについての記事を書いていきます!

「データサイエンス×教育」に興味があり、日々勉学に励んでいます。

少しでも役に立つ情報の発信をしていきますのでぜひ読んでください。

また、同志からのお声がけはとても励みになります。ぜひ、コメントやメール、SNS等でご連絡ください!
カテゴリー
統計学初学者サポートこちらをクリック

【統計学の実践】正規表現の基礎知識

正規表現は、文字列のパターンを効率よくマッチングするための強力なツールです。Pythonでは標準ライブラリのreモジュールを使用して正規表現を扱います。特にデータ分析や機械学習の分野では、データの前処理や特徴量作成において欠かせない技術です。本記事では、正規表現の基本的な概念、主要なメタ文字、Pythonにおける使用例を通して、その基礎をわかりやすく解説します。

目次

データアナリストへの道

少し数字に強い理系大学卒から駆け出しデータアナリストになるまでに、実際に読んだ50冊以上の本から厳選して、基本的な理論から実践的スキルまでを身につけられるようにデータ分析初学者向けにまとめました。>>記事を読む

正規表現とは

正規表現は、文字列の検索や置換、分割などを効率よく行うための文字列パターンを定義する方法です。例えば、「数字で始まる単語」や「特定の形式の日付」のようなルールを記述するのに適しています。

正規表現の利点は次の通りです。
• 柔軟性:多様な文字列パターンを記述できる。
• 効率性:複雑な文字列操作を少ないコードで実現可能。
• 再利用性:一度作成したパターンを繰り返し利用可能。

正規表現のメタ文字一覧

正規表現を理解するためには、メタ文字とその役割を把握することが重要です。以下に、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での使い方、特徴量作成の応用例までを紹介しました。正規表現は初めは難しく感じるかもしれませんが、繰り返し練習することで柔軟に使いこなせるようになります。ぜひ積極的に活用してみてください!

      さいごまで読んでいただきありがとうございました!

      このブログは統計学を学びたい学生/社会人向けに記事を書いています。

      【最新】こちらの記事がおすすめ!

      >>

      • URLをコピーしました!
      目次