0Pricing
Learn AI with Python · レッスン

re モジュール:search、match、findall、sub

パフォーマンスを考慮し、re.search()、re.match()、re.findall()、re.sub()、re.compile() を扱います。

「re モジュール:search、match、findall、sub」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。

re モジュール

Python では、組み込みのreモジュールを通じて正規表現を使用できます。主な関数はsearch、match、findall、subです。

どの関数を使うべきか判断できることが、正規表現を使いこなすうえで重要です。

import re   # always import it first

re.search — 文字列内を検索する

re.search(pattern, text)は文字列全体を調べて最初の一致を返します。一致するものがなければNoneを返します。結果はMatch objectです。

import re

m = re.search("\d+", "order 42 shipped")
if m:
    print(m.group())   # "42"
    print(m.start())   # 6

re.match — 先頭から一致させる

re.matchは文字列の先頭でのみ一致します。パターンが位置 0 にない場合、後ろの位置に現れていてもNoneを返します。

import re

print(re.match("\d+", "42 items"))    # matches "42"
print(re.match("\d+", "items 42"))    # None

search と match の違い

重要な違いは次のとおりです。

  • match — パターンがインデックス 0 から始まる必要があります
  • search — パターンがどの位置に現れてもかまいません

多くの場合はsearchを使います。接頭辞のチェックが必要な場合に限り、matchを使用してください。

re.findall — すべての一致を取得する

re.findallは、重複しないすべての一致を文字列のリストとして返します(Match object ではありません)。抽出処理に最適です。

import re

emails = re.findall("\w+@\w+\.\w+", "a@x.com and b@y.org")
print(emails)   # ["a@x.com", "b@y.org"]

グループを使った findall

パターンにキャプチャグループが含まれている場合、findallは一致全体ではなく、キャプチャされた部分を返します。これはよくある意外な動作です。

ここでは、各タプルに市外局番と残りの部分が格納されます。

import re

print(re.findall("(\d{3})-(\d{4})", "555-1234 and 999-8765"))
# [("555", "1234"), ("999", "8765")]

re.finditer — Match object を取得する

すべての一致について位置やグループが必要な場合は、re.finditerを使用してください。これにより、Match object が遅延評価で生成され、順番に反復処理できます。

import re

for m in re.finditer("\d+", "a1 b22 c333"):
    print(m.group(), "at", m.start())

re.sub — 検索して置換する

re.sub(pattern, replacement, text)は、すべての一致を置換文字列に置き換え、新しい文字列を返します。

マスキング、正規化、不要な文字の除去など、テキストクリーニングの基礎となる機能です。

import re

clean = re.sub("\d+", "#", "Room 101 and 202")
print(clean)   # "Room # and #"

後方参照と関数を使った sub

置換内容では、\1を使ってキャプチャグループを参照できます。また、動的な処理を行う関数を指定することもできます。

import re

# Swap "first last" -> "last, first"
print(re.sub("(\w+) (\w+)", "\\2, \\1", "Ada Lovelace"))

# Function replacement: double each number
print(re.sub("\d+", lambda m: str(int(m.group()) * 2), "a1 b2"))

re.compile — パターンを再利用する

ループ内などでパターンを何度も使う場合、re.compileを使うと、パターンを一度だけ構築して再利用可能なパターンオブジェクトにできます。処理が速くなり、コードも読みやすくなります。

import re

num = re.compile("\d+")
for line in ["a1", "b22", "c333"]:
    print(num.findall(line))

便利なフラグ

フラグを使うと、一致の動作を変更できます。

  • re.IGNORECASE — 大文字と小文字を区別しない
  • re.MULTILINE — ^/$を各行に対して適用する
  • re.DOTALL — .を改行にも一致させる
import re

print(re.findall("cat", "Cat CAT cat", re.IGNORECASE))
# ["Cat", "CAT", "cat"]

クイックチェック: search と findall の違い

文書内のどこに現れるかに関係なく、すべての電話番号のリストが必要です。

まとめ: re モジュール

これで、正規表現の主な関数が分かりました。

  • re.search — 文字列内のどこかにある最初の一致(Match object)
  • re.match — 先頭でのみ一致
  • re.findall — すべての一致のリスト(グループによって出力が変わります)
  • re.finditer — 位置情報を持つ Match object
  • re.sub — 後方参照または関数を使って一致箇所を置換する
  • re.compileとフラグ — パターンの再利用と動作の制御

次は、キャプチャグループと名前付きグループを扱います。

よくある質問

「re モジュール:search、match、findall、sub」レッスンは無料ですか?

はい。「re モジュール:search、match、findall、sub」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。

「re モジュール:search、match、findall、sub」で何を学びますか?

パフォーマンスを考慮し、re.search()、re.match()、re.findall()、re.sub()、re.compile() を扱います。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn AI with Pythonを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「re モジュール:search、match、findall、sub」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn AI with Pythonレッスンでコードを書いて実行できますか?

はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 正規表現パターンと文字クラス
  2. re モジュール:search、match、findall、sub
  3. キャプチャグループと名前付きグループ
  4. 正規表現による AI 向けテキストクリーニング
← Learn AI with Pythonに戻る