正規表現パターンと文字クラス
\d、\w、\s、.、^、$、+、*、?、{n,m}、文字クラス [a-z]、否定 [^...] を学びます。
「正規表現パターンと文字クラス」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
テキスト AI で正規表現が重要な理由
テキスト AI は、整理されていない生のテキストから始まります。正規表現(regex)は、電話番号、日付、ハッシュタグ、URL などのパターンを見つけて抽出するための簡潔な言語です。モデルに入力する前に、テキストをクリーニングして構造化できます。
このコースでは、パターン、reモジュール、グループ、そして実際のテキストクリーニングパイプラインについて学びます。
リテラル文字
最も単純なパターンはリテラルテキストです。指定した文字と完全に一致します。正規表現では、デフォルトで大文字と小文字が区別されます。
catは「the cat sat」の中の「cat」には一致しますが、「Cat」には一致しません。
import re
print(re.findall("cat", "the cat sat on a cat mat"))
# ["cat", "cat"]ドットメタ文字
ドット.は、改行を除く任意の 1 文字に一致します。ワイルドカードとして機能します。
c.tは「cat」、「cot」、「c9t」に一致します。つまり、c、1 文字、t の順で構成されるものすべてに一致します。
import re
print(re.findall("c.t", "cat cot cut c@t"))
# ["cat", "cot", "cut", "c@t"]数字、単語、空白のクラス
省略形の文字クラスを使うと、よく使う文字グループを表せます。
\d— 数字(0-9)\w— 単語文字(英字、数字、アンダースコア)\s— 空白文字(スペース、タブ、改行)
import re
print(re.findall("\d", "a1b2c3")) # ["1", "2", "3"]
print(re.findall("\w", "a_1!")) # ["a", "_", "1"]
print(re.findall("\s", "a b\tc")) # [" ", "\t"]否定文字クラス
大文字のバージョンは、文字クラスを否定します。
\D— 数字ではないもの\W— 単語文字ではないもの\S— 空白文字ではないもの
import re
print(re.findall("\D", "a1b2")) # ["a", "b"]
print(re.findall("\S", "a b c")) # ["a", "b", "c"][ ] によるカスタム文字セット
角かっこを使って独自のセットを定義できます。角かっこ内に列挙した文字のうち、いずれか 1 文字に一致します。範囲はハイフンで指定します。
[aeiou]— いずれかの母音[A-Za-z]— いずれかの英字[0-9]— いずれかの数字(\dと同じ)
import re
print(re.findall("[A-Za-z]", "ab12CD")) # letters only
print(re.findall("[aeiou]", "hello")) # ["e", "o"][^ ] による否定セット
角かっこの内側にキャレットを置くと、セットが否定されます。列挙されていない任意の文字に一致します。
[^abc]は、a、b、c 以外のすべてに一致します。(角かっこの外側にあるキャレットはアンカーとして機能します。次に説明します。)
import re
print(re.findall("[^aeiou ]", "hello world"))
# consonants: ["h", "l", "l", "w", "r", "l", "d"]アンカー: ^ と $
アンカーは文字ではなく位置に一致します。
^— 文字列(または行)の先頭$— 文字列(または行)の末尾
^Helloは、テキストが「Hello」で始まる場合にのみ一致します。
import re
print(bool(re.search("^Hello", "Hello world"))) # True
print(bool(re.search("world$", "Hello world"))) # True
print(bool(re.search("^world", "Hello world"))) # False量指定子: + * ?
量指定子は、直前の項目を何回繰り返すかを指定します。
+— 1 回以上*— 0 回以上?— 0 回または 1 回(省略可能)
import re
print(re.findall("\d+", "abc 123 de 45")) # ["123", "45"]
print(re.findall("ab*", "a ab abb")) # ["a", "ab", "abb"]
print(re.findall("colou?r", "color colour")) # both match範囲量指定子 {n,m}
波かっこを使うと、回数を正確に指定したり範囲で指定したりできます。
{3}— ちょうど 3 回{2,4}— 2 回から 4 回{2,}— 2 回以上
郵便番号や電話番号の一部など、長さが決まった項目に便利です。
import re
print(re.findall("\d{3}", "12 345 6789")) # ["345", "678"]
print(re.findall("\d{2,4}", "1 22 3333 55555"))要素を組み合わせる
実際のパターンでは、クラス、セット、アンカー、量指定子を組み合わせます。次のパターンは、555-123-4567 のような単純な米国の電話番号に一致します。
\d{3}-\d{3}-\d{4} — 3 桁の数字、ハイフン、3 桁の数字、ハイフン、4 桁の数字です。
import re
text = "Call 555-123-4567 or 999-888-7777"
print(re.findall("\d{3}-\d{3}-\d{4}", text))
# ["555-123-4567", "999-888-7777"]クイックチェック: 量指定子
連続する 1 桁以上の数字に一致させたいとします。
まとめ: パターンと文字クラス
これで、正規表現の基本要素が分かりました。
- リテラルと
.ワイルドカード - クラス
\d \w \sと、それらの否定\D \W \S - カスタムセット
[A-Za-z]と否定セット[^abc] - アンカー
^と$ - 量指定子
+ * ?と範囲{n,m}
次は、Python のreモジュールの関数を扱います。
よくある質問
「正規表現パターンと文字クラス」レッスンは無料ですか?
はい。「正規表現パターンと文字クラス」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「正規表現パターンと文字クラス」で何を学びますか?
\d、\w、\s、.、^、$、+、*、?、{n,m}、文字クラス [a-z]、否定 [^...] を学びます。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「正規表現パターンと文字クラス」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。