【Pythonコラム】Python 正規表現入門:文字列操作の強力な相棒




Python 正規表現入門:文字列操作の強力な相棒

Pythonにおける正規表現は、文字列の中から特定のパターンを探し出すための強力なツールです。文章の検索、データの検証、テキストの置換など、様々な場面で活躍します。プログラミング初心者の方でも、少しずつ理解を深めれば、日々の作業効率を飛躍的に向上させることができます。

正規表現とは何か?

正規表現は、ある文字列の集合を表現するための特殊な文字列です。この「特殊な文字列」を使って、検索したい文字列のパターンを記述します。例えば、「数字が連続する文字列」や「特定の単語で始まる行」など、複雑なパターンも表現できます。

Pythonで正規表現を使う準備

Pythonで正規表現を使うには、reモジュールをインポートする必要があります。

import re

このreモジュールが、正規表現を使った様々な処理を行うための関数を提供してくれます。

基本的な正規表現のパターン

いくつか基本的なパターンを覚えておきましょう。

  • . (ドット): 任意の1文字にマッチします(改行を除く)。
  • \d: 任意の数字(0-9)にマッチします。
  • \w: 任意の英数字(a-z, A-Z, 0-9)とアンダースコア(_)にマッチします。
  • \s: 任意の空白文字(スペース、タブ、改行など)にマッチします。
  • []: 角括弧の中のいずれかの文字にマッチします。例:[abc] は 'a', 'b', 'c' のいずれかにマッチします。
  • [^]: 角括弧の中の文字以外の文字にマッチします。 例:[^abc] は 'a', 'b', 'c' 以外の文字にマッチします。
  • *: 直前のパターンが0回以上繰り返される場合にマッチします。
  • +: 直前のパターンが1回以上繰り返される場合にマッチします。
  • ?: 直前のパターンが0回または1回出現する場合にマッチします。
  • {n}: 直前のパターンがちょうどn回繰り返される場合にマッチします。
  • {n,m}: 直前のパターンがn回以上m回以下繰り返される場合にマッチします。
  • ^: 文字列の先頭にマッチします。
  • $: 文字列の末尾にマッチします。
  • |: または (or) を意味します。例: a|b は 'a' または 'b' にマッチします。
  • (): グルーピング。パターンをグループ化し、後で参照することができます。

reモジュールの主な関数

reモジュールには、主に以下の関数があります。

  • re.search(pattern, string): 文字列stringの中で、パターンpatternに最初にマッチする箇所を探します。マッチする箇所が見つかれば、マッチオブジェクトを返します。見つからなければNoneを返します。
  • re.match(pattern, string): 文字列stringの先頭が、パターンpatternにマッチするかどうかを確認します。先頭がマッチすればマッチオブジェクトを返します。そうでなければNoneを返します。
  • re.findall(pattern, string): 文字列stringの中で、パターンpatternにマッチする全ての箇所をリストとして返します。
  • re.sub(pattern, repl, string): 文字列stringの中で、パターンpatternにマッチする箇所を、文字列replで置換します。置換後の文字列を返します。

簡単な例

例えば、文字列の中から数字を探す場合、以下のようにします。

import re

text = "私の電話番号は090-1234-5678です。"
pattern = r"\d{3}-\d{4}-\d{4}"  # 電話番号のパターン(\dは数字を表す)
match = re.search(pattern, text)

if match:
    print("電話番号が見つかりました:", match.group()) # group() でマッチした文字列を取得
else:
    print("電話番号は見つかりませんでした。")

この例では、r"\d{3}-\d{4}-\d{4}"という正規表現を使っています。\d{3}は3桁の数字、-はハイフンを表します。re.search()関数で、このパターンにマッチする箇所をtextの中から探し、マッチすればその文字列を表示します。rはraw stringを意味し、バックスラッシュをエスケープシーケンスとして解釈しないようにするために使用します。

さらに深く学ぶために

正規表現は非常に奥深く、様々な表現方法があります。より高度なパターンや、reモジュールの他の関数を学ぶことで、複雑な文字列操作も可能になります。

  • グループ化と後方参照: () を使ってパターンをグループ化し、\1, \2などで後方参照することができます。
  • 特殊文字のエスケープ: \., \*, \+のように、正規表現で特別な意味を持つ文字を文字リテラルとして扱うには、\ でエスケープします。
  • フラグ: re.IGNORECASE (大文字小文字を区別しない), re.MULTILINE (複数行モード), re.DOTALL (. が改行にもマッチする) などのフラグを使うことで、正規表現の挙動を細かく制御できます。

まとめ

正規表現は、最初は難しく感じるかもしれませんが、少しずつ学習を進めていくことで、非常に強力なツールとなります。様々なテキストデータに対して、柔軟かつ効率的な処理を実現できるようになるでしょう。色々なパターンを試したり、reモジュールのドキュメントを読んだりしながら、正規表現のスキルを磨いていきましょう。



サンプルコードを見る


< 文字列
コラム一覧に戻る
ファイル入出力 >

レッスン概要

◯月額4,000円で質問し放題!!
◯完全オンライン
◯翌日までには必ず返信
◯挫折しない独自の学習メソッド
◯圧倒的高評価!!
◯テキストベースで時間を選ばない
◯高品質なサンプルコード
詳細はこちら
興味がある方はまず質問だけでもどうぞ!