テストケース集(マッチする / マッチしない)
以下は先に示した「さらに細かいバリエーション」から主要パターンを抜粋し、実際に試すための短いマッチ/非マッチ例を並べたものです。各例はそのまま re.search や re.findall で試してください(生文字列 r”…” で使うことを推奨)。
1 日本向け電話番号(多形式対応・拡張)
- パターン(簡略示唆): 括弧・ハイフン・空白・ext を許可する柔軟パターン
- マッチする:
- 03-1234-5678
- (045) 123 4567
- 0120 12 3456
- 03.1234.5678 ext.123
- マッチしない:
- abc-1234-5678
- 123456 (明らかに短すぎる)
- +81-3-1234-5678(国際表記は別扱いにしたい場合)
2 日本の携帯(ハイフン有無・厳密)
- パターン: r”\b(?:0[7-9]0|050)[ -–.]?\d{4}[ -–.]?\d{4}\b”
- マッチする:
- 090-1234-5678
- 08012345678
- 050 1234 5678
- マッチしない:
- 070-123-4567(ブロック長が不正)
- 091-1234-5678(090/080/070/050以外)
3 国際 E.164(+国番号・数字のみ)
- パターン: r”+[1-9]\d{1,14}\b”
- マッチする:
- +819012345678
- +14155552671
- マッチしない:
- 0819012345678(先頭に + がない)
- +012345(国コードは0で始まらない)
4 国際表記(区切りあり・内線含む)
- パターン(概念): 国番号・区切り・内線を許容する複合パターン
- マッチする:
- +81 90-1234-5678
- +44 (20) 1234 5678 x123
- +1-415-555-2671 ext 45
- マッチしない:
- 90-1234-5678(国番号必須の文脈なら不可)
- +81-abc-def-ghij(数字以外のブロック)
5 メールアドレス(IDN候補・Punycode含む)
- パターン(実用型): ローカル部に多数記号、ドメインに xn-- 等許容
- マッチする:
- user@example.com
- user.name+tag@sub.example.co.jp
- 名字@xn--wgv71a119e(Punycode を含む例)
- マッチしない:
- user@@example.com(@が2つ)
- user@-example.com(ラベル先頭が – の場合)
- “quoted”@example (簡易パターンでは未対応の特殊ローカル部)
6 メールアドレス(厳密寄せ)
- パターン(RFC寄せ簡易)
- マッチする:
- a@example.com
- long_local-part_123@example-domain.co
- マッチしない:
- .startdot@example.com(先頭ドット禁止)
- user@toolongtld.abcdefghijklmnop(TLDの長さ超過想定)
7 ドメイン名(IDN候補)
- パターン: ASCII ドメイン / xn-- を許容
- マッチする:
- example.com
- sub.example.co.jp
- xn--wgv71a119e.jp
- マッチしない:
- example..com(連続ドット)
- -example.com(ラベル先頭が -)
8 IPv4(0-255 範囲チェック付き)
- パターン: 0–255 を厳密にチェックするパターン
- マッチする:
- 192.168.0.1
- 0.0.0.0
- 255.255.255.255
- マッチしない:
- 256.100.1.1(256 は範囲外)
- 01.02.03.04(先頭ゼロ許容/扱いに注意する文脈あり)
9 IPv6(簡易・圧縮含む)
- パターン(簡易): 16ビットブロックの繰り返し+ :: 形式を許容
- マッチする:
- 2001:0db8:85a3:0000:0000:8a2e:0370:7334
- fe80::1
- ::1
- マッチしない:
- 2001:db8:::1(:: の異常連続)
- 2001:db8:85a3:z:0:8a2e:0370:7334(16進以外含む)
10 ISO系日時(可変区切り・時刻・タイムゾーン許容)
- パターン: YYYY-MM-DD[T ]HH:MM(:SS)?(Z|±HH:MM)?
- マッチする:
- 2023-07-15
- 2023/07/15 12:34
- 2023-07-15T23:59:59Z
- 2023-07-15T09:30+09:00
- マッチしない:
- 2023-13-01(13月)
- 20230715(区切りなしは未対応のパターン)
11 通貨・金額(記号・カンマ・スペース対応)
- パターン: 記号オプション + カンマorスペース桁区切り + 小数部任意
- マッチする:
- $1,234.56
- ¥ 1 234
- EUR1234.5
- マッチしない:
- 1,23,4(不正なカンマ位置)
- $- (記号のみ、数値なし)
12 クレジットカード風(フォーマット抽出)
- パターン: 4桁グループ x4 または 15–16 桁
- マッチする:
- 4111 1111 1111 1111
- 4111111111111111
- 3782-822463-10005 (AMEX 15桁をハイフンで)
- マッチしない:
- 1234 567 890(桁数不足)
- 4111 1111 1111 111X(数字以外混入)
13 JSONキー抽出(簡易)
- パターン: r'”\s([A-Za-z0-9_]+)\s“\s*:’
- マッチする (抽出されるキー):
- “name”: -> name
- “user_id” : -> user_id
- マッチしない:
- “complex key name”:(スペース含むキーは未対応)
- ‘single-quoted’:(シングルクォートのキーは未対応の簡易版)
14 URL(ポート・パス・クエリ含む実用版)
- パターン(概念): scheme://host(:port)?(/path)?(?query)?
- マッチする:
- http://example.com
- https://example.com:8080/path/to/page?x=1&y=2
- https://xn--wgv71a119e.jp/パス(URL 中の Punycode 部分は host 部に適合)
- マッチしない:
- www.example.com(スキームが必須のパターンなら非マッチ)
- http:/example.com(スラッシュ数不足)
15 ファイルパス(Windows・厳密)
- パターン: ドライブレター + \ + ラベル群(禁止文字排除)
- マッチする:
- C:\Users\Alice\Documents\file.txt
- D:\a\b\c\
- マッチしない:
- C:Users\Alice(バックスラッシュ欠如)
- C:\inva|id\name.txt(禁止文字 | を含む)
使い方メモ
- まずは re.search(pattern, s) で True/False を確認し、re.findall で抽出結果を確認してください。
- テストは「正常系(マッチする)」「異常系(類似だがマッチしない)」の両方を用意すると良いです。
- 実運用では抽出後に正規化(空白・ハイフン除去、IDNA変換、datetime/parsing、Luhn等)と追加検証を必ず行ってください。
