0Pricing
Python Academy · レッスン

re.sub、フラグ、コンパイル済みパターン

テキストを置換し、IGNORECASE などのフラグを使い、再利用するパターンをコンパイルします。

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

概要

re.subはマッチを置換します。フラグはマッチの動作を変更します。コンパイル済みパターンは、繰り返し利用する場合に効率的です。

re.subの基本

re.sub(pattern, repl, string)は、すべてのマッチをreplに置換します。4番目の引数count=で置換回数を制限できます。
import re
result = re.sub(r'\d+', 'X', 'abc 123 def 456')
print(result)

グループを使ったre.sub

置換に\1、\2、または\g<1>を使うと、キャプチャしたグループを挿入できます。名前付きグループには\gを使います。
import re
# Swap first and last name
result = re.sub(r'(\w+),\s*(\w+)', r'\2 \1', 'Smith, John')
print(result)

関数を使ったre.sub

置換にはcallableを指定できます。f(match) → replacement stringのように、複雑な変換が可能になります。
import re
def double_num(m): return str(int(m.group())*2)
result = re.sub(r'\d+', double_num, '1 cats and 2 dogs')
print(result)

re.IGNORECASE (re.I)

パターンで大文字と小文字を区別しないようにします。re.Iを指定したr'hello'は、'HELLO'、'Hello'などにマッチします。
import re
print(re.findall(r'hello', 'Hello HELLO hello', re.I))

re.MULTILINE (re.M)

^と$が文字列全体ではなく、各LINEの先頭と末尾にマッチするようにします。
import re
text = 'first\nsecond\nthird'
print(re.findall(r'^\w+', text, re.M))

re.DOTALL (re.S)

.が改行にもマッチするようにします。指定しない場合、.は行の境界で停止します。
import re
text = 'line1\nline2'
print(re.search(r'line1.line2', text, re.S).group())

re.VERBOSE (re.X)

可読性を高めるため、パターン内にコメントと空白を記述できるようにします。空白は無視されます。リテラルの空白には\ + spaceを使います。
import re
pattern = re.compile(r'''
    (?P<year>\d{4})   # year
    -
    (?P<month>\d{2}) # month
    -
    (?P<day>\d{2})   # day
''', re.X)
print(pattern.search('2024-01-15').groupdict())

フラグの組み合わせ

|でフラグを組み合わせます。re.I | re.Mのように記述します。または、パターンの先頭でインラインフラグ(?im)を使います。
import re
print(re.findall(r'^\w+', 'Hello\nWorld', re.I | re.M))

パフォーマンスのためのre.compile

re.compile()でパターンを一度コンパイルします。コンパイル済みオブジェクトのメソッドpat.search()、pat.findall()を呼び出します。
import re
email_re = re.compile(r'[\w.+-]+@[\w-]+\.[\w.]+')
emails = ['user@example.com', 'invalid', 'test@test.org']
print([e for e in emails if email_re.fullmatch(e)])

re.escape()

re.escape(string)は、文字列内のすべての特殊な正規表現文字をエスケープするため、その文字列をリテラルパターンとして使えます。
import re
user_input = 'price.is $10+'
pattern = re.compile(re.escape(user_input))
text = 'The price.is $10+ today'
print(bool(pattern.search(text)))

クイックチェック

Pythonの正規表現で、.を改行にもマッチさせるフラグはどれですか?

まとめ

re.sub:文字列、グループ、または関数で置換します。フラグ:re.I(大文字と小文字)、re.M(複数行の^/$)、re.S(ドットが\nにマッチ)、re.X(詳細モード)。再利用するパターンはコンパイルします。

続けましょう

素晴らしい成果です!次のレッスンが待っています。

よくある質問

「re.sub、フラグ、コンパイル済みパターン」レッスンは無料ですか?

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

「re.sub、フラグ、コンパイル済みパターン」で何を学びますか?

テキストを置換し、IGNORECASE などのフラグを使い、再利用するパターンをコンパイルします。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「re.sub、フラグ、コンパイル済みパターン」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. 正規表現の基礎
  2. re.match、re.search、re.findall の使い方
  3. グループと名前付きキャプチャ
  4. re.sub、フラグ、コンパイル済みパターン
← Python Academyに戻る