正規表現の構文と基本パターン
メニューを表示するにはスワイプしてください
正規表現の構文:構成要素
正規表現(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 ライブラリを使ってテキスト内の文字や単語、単語に似たパターンを一致させるために不可欠です。
123456789101112131415import 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" までの任意の大文字と一致します。各文字クラスは角括弧で囲まれており、一致させたい文字の範囲や集合を指定します。これらのパターンは、テキストから特定の種類の文字を抽出する際の基本となります。
123456789101112131415161718192021222324252627import 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 でテキストから情報を抽出・解析する際に役立ちます。
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください