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
モジュールのドキュメントを読んだりしながら、正規表現のスキルを磨いていきましょう。
コラム一覧
◯for文
◯関数
◯配列
◯文字列
◯正規表現
◯ファイル入出力
◯openpyxl
◯Numpy
◯Matplotlib
◯Pandas
◯scikit-learn
◯seaborn
◯beautifulsoup
◯tkinter
◯OpenCV
◯pygame
◯メイン関数
◯自作ライブラリ
◯画像処理
◯機械学習
◯スクレイピング
◯データ分析
◯グラフ作成
◯API
◯可読性
◯デバッグ
◯例外処理
◯コメント
◯組み込み関数
◯flask
◯学び方
◯ビット演算
◯マルチスレッドプログラミング
◯参照渡し
◯pyenv
◯エディタ
◯生成AI
◯画像認識
◯Streamlit
◯lambda式
◯物理演算シミュレーション
◯命名規則
◯遺伝的アルゴリズム
◯関数型プログラミング
◯オブジェクト指向
◯ツリー図