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 firstre.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()) # 6re.match — 先頭から一致させる
re.matchは文字列の先頭でのみ一致します。パターンが位置 0 にない場合、後ろの位置に現れていてもNoneを返します。
import re
print(re.match("\d+", "42 items")) # matches "42"
print(re.match("\d+", "items 42")) # Nonesearch と 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 objectre.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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 正規表現パターンと文字クラス
- re モジュール:search、match、findall、sub
- キャプチャグループと名前付きグループ
- 正規表現による AI 向けテキストクリーニング