Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ 正規表現の構文と基本パターン | 正規表現のイントロダクション
Python正規表現

正規表現の構文と基本パターン

メニューを表示するにはスワイプしてください

正規表現の構文:構成要素

正規表現(regex)は、リテラルメタ文字文字クラス、および量指定子の組み合わせで構成されます。これらの要素を理解することは、効果的なパターンを作成するために不可欠です。

  • リテラルは、それ自体と一致する通常の文字です。例えば、パターン "cat" は正確に "cat" という文字列と一致します;
  • メタ文字は、正規表現内で特別な意味を持つ記号です。主なメタ文字には次のものがあります:
    • .(ドット):改行を除く任意の1文字と一致;
    • ^:文字列の先頭と一致;
    • $:文字列の末尾と一致;
    • *:直前の要素が0回以上出現する場合と一致;
    • +:直前の要素が1回以上出現する場合と一致;
    • ?:直前の要素が0回または1回出現する場合と一致。
  • 文字クラスは、指定した文字集合のいずれか1文字と一致させるために使用します。例えば、[abc]"a""b""c" のいずれかと一致し、[0-9] は0から9までの任意の数字と一致します。

便利な文字ベースのメタ文字と量指定子

  • \w単語構成文字[a-zA-Z0-9_] と同等)と一致。英字、数字、アンダースコア1文字と一致;
  • \W非単語構成文字\w 以外のすべて)と一致;
  • \d数字[0-9] と同等)と一致;
  • \D非数字の文字と一致;
  • \b単語境界(単語構成文字と非単語構成文字の間の位置)と一致。単語全体を一致させる場合に使用;
  • \B:単語境界以外の位置と一致。

量指定子

量指定子は、直前の要素が出現する回数を指定します:

  • *0回以上と一致。例:\w* は単語構成文字の任意の並び(空文字列も含む)と一致;
  • +1回以上と一致。例:\w+ は1文字以上連続する単語構成文字(単語など)と一致;
  • ?0回または1回と一致。例:\w? は単語構成文字が0回または1回出現する場合と一致;
  • {n}ちょうどn回と一致。例:\w{3} は連続する3文字の単語構成文字と一致;
  • {n,}n回以上と一致。例:\w{2,} は2回以上連続する単語構成文字と一致;
  • {n,m}n回からm回までと一致。例:\w{2,5} は2回から5回連続する単語構成文字と一致。

Pythonでの例

  • re.findall(r"\w+", "Regex123 is fun!") はすべての単語を返します: ["Regex123", "is", "fun"]
  • re.findall(r"\bcat\b", "The cat scattered the catalog.") は独立した単語 "cat" のみと一致;
  • re.findall(r"\w{5}", "apple banana kiwi") はちょうど5文字の単語構成文字の並びを抽出します: ["apple", "banan"]

これらのメタ文字や量指定子は、Pythonの re ライブラリを使ってテキスト内の文字や単語、単語に似たパターンを一致させるために不可欠です。

123456789101112131415
import re text = "User123, admin42, guestX" # Find all digits digits = re.findall(r"[0-9]", text) print("Digits found:", digits) # Find all lowercase letters lowercase_letters = re.findall(r"[a-z]", text) print("Lowercase letters found:", lowercase_letters) # Find all uppercase letters uppercase_letters = re.findall(r"[A-Z]", text) print("Uppercase letters found:", uppercase_letters)

この例では、re.findall() 関数を使用して、文字列 "User123, admin42, guestX" 内でパターンに一致する部分を検索しています。パターン [0-9] は0から9までの任意の数字と一致し、テキスト内のすべての数字を抽出します。パターン [a-z]"a" から "z" までの任意の小文字と一致し、[A-Z]"A" から "Z" までの任意の大文字と一致します。各文字クラスは角括弧で囲まれており、一致させたい文字の範囲や集合を指定します。これらのパターンは、テキストから特定の種類の文字を抽出する際の基本となります。

123456789101112131415161718192021222324252627
import re text = "Hello_123 world! Regex is fun." # \w matches any word character (alphanumeric or underscore) word_chars = re.findall(r"\w", text) print("Word characters (\\w):", word_chars) # \W matches any non-word character non_word_chars = re.findall(r"\W", text) print("Non-word characters (\\W):", non_word_chars) # \b matches word boundaries words = re.findall(r"\b\w+\b", text) print("Words using word boundaries (\\b):", words) # * quantifier: zero or more word characters after 'o' pattern_star = re.findall(r"o\w*", text) print("'o' followed by zero or more word characters (o\\w*):", pattern_star) # + quantifier: one or more word characters after 'R' pattern_plus = re.findall(r"R\w+", text) print("'R' followed by one or more word characters (R\\w+):", pattern_plus) # ? quantifier: 'l' optionally followed by 'e' pattern_question = re.findall(r"le?", text) print("'l' optionally followed by 'e' (le?):", pattern_question)

ここでは、Python の re.findall() 関数を使って、さまざまな正規表現パターンで文字列 "Hello_123 world! Regex is fun." から情報を抽出する方法を示しています。各パターンの動作は以下の通りです。

  • \w: パターン r"\w" は、単語文字(大文字・小文字のアルファベット、数字、アンダースコア(_))にマッチします。この文字列では 'H''e''l''o''1''2''3' など、すべての単語文字が抽出されます。

  • \W: パターン r"\W" は、非単語文字にマッチします。これはスペースや句読点、記号など、アルファベット・数字・アンダースコア以外の文字です。この文字列ではスペース、感嘆符(!)、ピリオド(.)などが該当します。

  • \b: パターン r"\b\w+\b" は、単語境界\b)を使って完全な単語にマッチします。\w+ は1文字以上の単語文字にマッチするため、'Hello_123''world''Regex''is''fun' などの単語全体が抽出されます。

  • * 量指定子: パターン r"o\w*" は、文字 'o' の後に0個以上の単語文字が続く部分にマッチします。つまり、'o' の後に単語文字がなくてもマッチし、また 'o' から始まる連続した単語文字列も抽出します。この文字列では 'o_123''Hello_123' より)と 'orld''world' より)が該当します。

  • + 量指定子: パターン r"R\w+" は、文字 'R' の後に1個以上の単語文字が続く部分にマッチします。これは 'R' で始まる単語を抽出するのに便利です。この文字列では 'Regex' が該当します。

  • ? 量指定子: パターン r"le?" は、文字 'l' の後に 'e'0回または1回現れる部分にマッチします。? 量指定子は直前の文字(ここでは 'e')が0回または1回現れることを意味します。このパターンは、文字列中の 'l''le' の両方にマッチします。

これらのパターンは、正規表現の主要な機能である特定の文字種、境界、繰り返し要素のマッチングを示しており、Python でテキストから情報を抽出・解析する際に役立ちます。

question mark

正規表現パターン [a-z] は何にマッチしますか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 1.  2

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 1.  2
some-alt