キャプチャグループと名前付きグループ
キャプチャ用の括弧、(?P ...) 名前付きグループ、re.fullmatch()、先読み・後読みを学びます。
「キャプチャグループと名前付きグループ」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
グループを使う理由
グループを使うと、一致した部分の一部を分離して取得できます。電話番号から市外局番を、日付から年を、メールアドレスからユーザー名を取り出すといった処理が可能です。
このレッスンでは、キャプチャグループ、名前付きグループ、非キャプチャグループ、先読み・後読みについて学びます。
( ) によるキャプチャグループ
パターンの一部を丸かっこで囲むと、その部分をキャプチャできます。一致全体と各グループには、Match object からアクセスできます。
import re
m = re.search("(\d{4})-(\d{2})-(\d{2})", "Date: 2026-05-29")
print(m.group()) # "2026-05-29" (whole match)
print(m.group(1)) # "2026"
print(m.group(2)) # "05"match.group、groups、groupdict
便利なアクセサーは次のとおりです。
m.group(0)— 一致全体m.group(n)— n 番目のキャプチャm.groups()— すべてのキャプチャを含むタプル
import re
m = re.search("(\d{4})-(\d{2})-(\d{2})", "2026-05-29")
print(m.groups()) # ("2026", "05", "29")
year, month, day = m.groups()(?P<name>...) による名前付きグループ
グループを番号で管理すると、壊れやすくなります。名前付きグループでは(?P<name>...)を使うため、意味のある名前でキャプチャを参照できます。
import re
m = re.search("(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})", "2026-05-29")
print(m.group("year")) # "2026"
print(m.group("month")) # "05"構造化された出力のための groupdict
m.groupdict()は、すべての名前付きグループを辞書として返します。一致したテキストを構造化されたレコードに変換するのに最適です。
import re
m = re.search("(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})", "2026-05-29")
print(m.groupdict())
# {"year": "2026", "month": "05", "day": "29"}非キャプチャグループ (?:...)
量指定子を適用する場合など、グループ化のためだけに丸かっこが必要で、キャプチャは不要なことがあります。その場合は(?:...)を使用してください。
これにより、グループ番号をすっきり保てます。
import re
# Group "ab" so + applies, but do not capture it
m = re.search("(?:ab)+(\d+)", "ababab42")
print(m.group(1)) # "42" -> group 1 is the digits, not "ab"後方参照
後方参照の\1は、前にグループがキャプチャしたテキストと同じテキストに一致します。繰り返し現れる単語を見つけるのに便利です。
import re
# Find a word repeated twice in a row
print(re.findall("(\w+) \1", "the the cat cat sat"))
# ["the", "cat"]先読み (?=...)
肯定先読み (?=...) は、後に続くはずの内容を消費せずに確認します。確認したテキストはマッチの一部ではありません。
ここでは、後ろに "px" が続く場合にのみ数値をマッチさせます。
import re
print(re.findall("\d+(?=px)", "10px 20em 30px"))
# ["10", "30"] -> "20" skipped (not followed by px)否定先読み (?!...)
否定先読み (?!...) は、後に続いてはならない内容を確認します。後ろに "px" が続かない場合にのみ数値をマッチさせます。
import re
print(re.findall("\d+(?!px)", "10px 20em 30px"))
# matches numbers not followed directly by px後読み (?<=...) と (?<!...)
後読みは、マッチの前にある内容を消費せずに確認します。
(?<=...)肯定 — 前に特定の内容がある必要があります(?<!...)否定 — 前に特定の内容があってはなりません
ここでは、ドル記号が前に付いた金額を、記号自体は含めずに取り出します。
import re
print(re.findall("(?<=\$)\d+", "price $50 and 60 units"))
# ["50"] -> only the amount after $グループと先読み・後読みの組み合わせ
実際の抽出処理では、これらのツールを組み合わせます。このパターンは、通貨記号が前にあり、小数部分が後に続く必要がある、名前付きの価格を取り出します。
import re
text = "Total: $1299.99 paid"
m = re.search("(?<=\$)(?P<amount>\d+)\.(?P<cents>\d{2})", text)
print(m.group("amount"), m.group("cents")) # 1299 99クイックチェック:名前付きグループ
番号ではなく、"year" のような分かりやすい名前でマッチを取り出したいとします。
振り返り:グループと先読み・後読み
これで、テキストから正確な構造を取り出せるようになりました。
( )キャプチャグループとm.group(n)、m.groups()(?P<name>...)名前付きグループとm.groupdict()- きれいにグループ化するための
(?:...)非捕捉グループ - 繰り返しに使うバックリファレンス
\1 - 先読み
(?=)/(?!)と後読み(?<=)/(?<!)
次は、これらをすべて組み合わせて、AI向けにテキストを整形します。
よくある質問
「キャプチャグループと名前付きグループ」レッスンは無料ですか?
はい。「キャプチャグループと名前付きグループ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「キャプチャグループと名前付きグループ」で何を学びますか?
キャプチャ用の括弧、(?P ...) 名前付きグループ、re.fullmatch()、先読み・後読みを学びます。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「キャプチャグループと名前付きグループ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 正規表現パターンと文字クラス
- re モジュール:search、match、findall、sub
- キャプチャグループと名前付きグループ
- 正規表現による AI 向けテキストクリーニング