実用的な正規表現全文集(Python 用・生文字列 r’…’ 推奨)
以下は前回のテストケースに対応する「そのまま使える」正規表現全文です。コピーして re.compile()/re.findall() に渡して使ってください。必要なら各パターンのフラグやテストスニペットも付けます。
注意点:どれも「現実的に使える」ように妥協して作っていますが、完全な RFC や仕様検証(うるう年判定・IP 範囲以外の例外・複雑なメールの引用部など)は別途追加処理をしてください。
1 日本向け電話番号(多形式対応・拡張)
- パターン(括弧・ハイフン・空白・ピリオド・ext を許容)
r"(?x)\b(?:\(?0\d{1,4}\)?[ \-–.]*)?\d{1,4}(?:[ \-–.]*\d{1,4})*(?:[ \-–.]*(?:ext|ext\.|x)\s*\d{1,5})?\b"
Python2 日本の携帯電話(090/080/070/050、ハイフン任意)
r"\b(?:0(?:70|80|90)|050)[ \-–.]?\d{4}[ \-–.]?\d{4}\b"
Python3 国際 E.164(+国番号、数字のみ、最大15桁)
r"\+[1-9]\d{1,14}\b"
Python4 国際表記(区切りあり/内線許容・柔軟)
r"(?x)\b\+?[0-9]{1,3}[ \-.\(]*\d{1,4}[ \-.\)]*(?:\d{1,4}[ \-.\)]*)+(?:[ \-.,]*(?:ext|x|ext\.)[ \-]?\d{1,6})?\b"
Python5 メールアドレス(IDN候補・Punycode 対応の実用版)
r"[A-Za-z0-9.!#$%&'*+/=?^_`{|}~-]+@[A-Za-z0-9\-._~%]+(?:\.[A-Za-z0-9\-._~%]+)+"
Python6 メールアドレス(より厳密寄せ:ラベル長や先頭末尾規則を簡易チェック)
r"(?x)^[A-Za-z0-9](?:[A-Za-z0-9._%+-]{0,62}[A-Za-z0-9])?@(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+[A-Za-z]{2,63}$"
Python(行全体チェック向け。re.match または ^…$ と組み合わせて使用)
7 ドメイン名(ASCII + xn-- Punycode 両対応)
r"\b(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+(?:[A-Za-z]{2,63}|xn--[A-Za-z0-9-]+))\b"
Python8 IPv4(厳密:各オクテット 0–255)
r"\b(?:(?:25[0-5]|2[0-4]\d|1?\d{1,2})\.){3}(?:25[0-5]|2[0-4]\d|1?\d{1,2})\b"
Python9 IPv6(簡易:通常形式と :: 圧縮形式を概ね許容)
r"(?xi)\b(?:[0-9A-F]{1,4}:){7}[0-9A-F]{1,4}\b|\b(?:[0-9A-F]{1,4}:){0,7}::(?:[0-9A-F]{1,4}:){0,7}[0-9A-F]{0,4}\b"
Python10 ISO 系日付(YYYY-MM-DD + 時刻 + タイムゾーン 任意)
r"\b(19|20)\d{2}[-/\.](0[1-9]|1[0-2])[-/\.](0[1-9]|[12]\d|3[01])(?:[Tt ]([01]\d|2[0-3]):[0-5]\d(?::[0-5]\d)?)?(?:Z|[+\-](?:[01]\d|2[0-3]):[0-5]\d)?\b"
Python11 通貨・金額(記号任意・カンマやスペース区切り・小数部任意)
r"\b(?:¥|\$|€|EUR)?\s*[+-]?\d{1,3}(?:[,\s]\d{3})*(?:\.\d+)?\b"
Python12 クレジットカード風(4桁グループまたは 15–16 桁)
r"\b(?:\d{4}[ \-]?){3}\d{4}\b|\b\d{15,16}\b"
Python13 JSON風キー抽出(単純キー:英数字とアンダースコアのみ)
r'"\s*([A-Za-z0-9_]+)\s*"\s*:'
Python14 URL(http/https、ポート・パス・クエリを簡易抽出)
r"https?://(?P<host>[^:/\s]+)(?::(?P<port>\d{1,5}))?(?P<path>/[^\s]*)?"
Python15 Windows ファイルパス(ドライブレター + バックスラッシュ、禁止文字排除)
r"[A-Za-z]:\\(?:[^\\/:*?\"<>|\r\n]+\\)*[^\\/:*?\"<>|\r\n]*"
Python16 英単語(単語境界)
r"\b[a-zA-Z]+\b"
Python17 日本語語句(ひらがな・カタカナ・漢字の連続)
r"[\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FFF]+"
Python18 浮動小数点(符号・指数表記含む簡易)
r"[+-]?(?:\d+\.\d*|\.\d+|\d+)(?:[eE][+-]?\d+)?"
Python19 カンマ区切り金額(例 1,234,567)
r"\b\d{1,3}(?:,\d{3})*\b"
Python20 前方参照例(”ID:” に続く数字のみを抽出)
r"(?<=ID:)\d+"
Python使い方メモ(簡単):
- 常に生文字列で書く: pattern = re.compile(r”…”)
- 行全体検証するときは ^…$ を使う(例:6 のメール厳密化)
- 大文字小文字無視は flags=re.I、複雑化して読みやすくするなら re.VERBOSE を使う
