Pythonの正規表現パターン一覧表

正規表現(レギュラーエクスプレッション)とは、特定の文字の並びをパターン化して表現する方法です。これを使うことで、複雑な文字列の検索や抽出、入力チェックを一瞬で行うことができます。まずはよく使われるパターンの一覧を確認しましょう。
| 正規表現 | 説明 | 例 |
|---|---|---|
^ |
行の先頭に一致 | ^abc は "abc" で始まる文字列に一致 |
$ |
行の末尾に一致 | abc$ は "abc" で終わる文字列に一致 |
. |
任意の1文字(改行除く)に一致 | a.b は "a" と "b" の間に任意の文字がある文字列に一致 |
* |
直前の要素の0回以上の繰り返し(最長一致) | ab*c は "ac", "abc", "abbc" に一致 |
+ |
直前の要素の1回以上の繰り返し(最長一致) | ab+c は "abc", "abbc" に一致 |
? |
直前の要素が0回または1回 | ab?c は "ac", "abc" に一致 |
[] |
文字クラス、指定した文字のいずれかに一致 | [abc] は "a", "b", "c" のいずれかに一致 |
[^] |
文字クラス、指定した文字以外に一致 | [^abc] は "a", "b", "c" 以外に一致 |
() |
グループ化、キャプチャ | (abc) は "abc" に一致し、その部分を取り出せる |
| |
OR (または) に一致 | a|b は "a" または "b" に一致 |
\d |
数字 (0-9) に一致 | \d は "0" から "9" に一致 |
\D |
数字以外に一致 | \D は数字以外に一致 |
\w |
英数字またはアンダースコアに一致 | \w は "a-zA-Z0-9_" に一致 |
\W |
英数字またはアンダースコア以外に一致 | \W はそれ以外に一致 |
\s |
空白文字に一致 | \s はスペース、タブ、改行などの空白に一致 |
\S |
空白以外に一致 | \S は空白文字以外に一致 |
\b |
単語境界に一致 | \bword\b は "word" という独立した単語に一致 |
\B |
単語境界以外に一致 | \Bword\B は他の文字に挟まれた "word" に一致 |
{n} |
n回繰り返す | a{3} は "aaa" に一致 |
{n,} |
n回以上繰り返す | a{2,} は "aa", "aaa", "aaaa" に一致 |
{n,m} |
n回からm回まで繰り返す | a{2,4} は "aa", "aaa", "aaaa" に一致 |
(?=...) |
ポジティブの先読み | a(?=b) は "a" の直後に "b" が続く場合の "a" に一致 |
(?!...) |
ネガティブの先読み | a(?!b) は "a" の直後に "b"が続かない場合の "a" に一致 |
(?<=...) |
ポジティブの後読み | (?<=a)b は "a" の直後にある "b" に一致 |
(?<!...) |
ネガティブの後読み | (?<!a)b は "a" の直後にない "b" に一致 |
\ |
特殊文字のエスケープ | \. は本来の意味(任意の1文字)ではなく、文字としての "." に一致 |
Pythonにおける正規表現の使い方
Pythonでは、標準ライブラリの re モジュールをインポートすることで、正規表現を使った高度な文字列処理を簡単に行うことができます。
追加解説:Pythonで正規表現を書く時は「r」を忘れるな!
Pythonで正規表現のパターン文字を書くときは、文字列の先頭に r'...' と記述する慣習(raw文字列記法)があります。これがないと、正規表現で多用する \d や \s のバックスラッシュ(\)が、Python本来の改行(\n)などのエスケープシーケンスと衝突してしまい、思わぬバグやエラーを引き起こしてしまいます。正規表現を扱う際は、常に r を付ける癖をつけましょう。
基本的な例と重要関数の違い
文字列を検索する代表的な関数には re.search() と re.match() があります。この2つは「検索を始める位置」のルールが異なるため、初心者が非常につまずきやすいポイントです。
re.search(): 文字列のどこか(途中でも可)にパターンが含まれているかを検索します。re.match(): 文字列の先頭からパターンが始まっているかを厳格にチェックします。
import re
pattern = r'abc'
string = '..abcde' # 先頭にドットが2つある文字列
# 1. search関数(文字列の途中でも見つけてくれる)
result_search = re.search(pattern, string)
print(result_search is not None) # True
# 2. match関数(先頭から一致していないと見落とす)
result_match = re.match(pattern, string)
print(result_match is not None) # False(先頭が '..' なので見つからない)
修飾子(フラグ)
Pythonの正規表現には、検索の挙動をコントロールする以下のフラグ(修飾子)をオプションとして付けることができます。
re.IGNORECASE(またはre.I): 大文字と小文字を区別せずに検索します。re.MULTILINE(またはre.M): 対象の文字列が複数行ある場合、^や$を各行の先頭・末尾に適用させます。re.DOTALL(またはre.S): 本来は改行を含まない.(任意の1文字)に、改行文字も含めるようにします。re.VERBOSE(またはre.X): 正規表現のパターン内に空白やコメント(#)を書き込めるようになり、複雑なパターンの可読性を上げることができます。
# 修飾子の使用例(大文字小文字を無視)
text = "I love PYTHON"
result = re.search(r"python", text, re.IGNORECASE)
print(result is not None) # True
特定のパターンの例(実務での定番レシピ)
実務の入力フォームチェックなどでよく使われる具体的な正規表現パターンです。全体の完全一致を確かめるために、先頭を示す ^ と末尾を示す $ でパターン全体を囲んでいる点に注目してください。
Emailアドレスの検証
import re
email_regex = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
print(re.match(email_regex, "example@example.com") is not None) # True
print(re.match(email_regex, "invalid-email@") is not None) # False
URLの検証
import re
url_regex = r'^(https?:\/\/)?([\w\d\-]+\.)+\w{2,}(\/.*)?$'
print(re.match(url_regex, "https://example.com") is not None) # True
電話番号の検証(日本形式)
import re
phone_regex = r'^\d{2,4}-\d{2,4}-\d{4}$'
print(re.match(phone_regex, "090-1234-5678") is not None) # True
print(re.match(phone_regex, "09012345678") is not None) # False(ハイフンがないため)
まとめ
Pythonの正規表現は、パターンマッチングや文字列の検索・抽出・置換に非常に強力なツールです。記述が独特なため初めは難しく感じられますが、re モジュールの search や match、そして r'...'(raw文字列)のルールを押さえておけば、テキスト処理の効率が格段にアップします。よく使うパターンを手元に置きながら、少しずつコードに組み込んで慣れていきましょう。