'080 (1234) 0001', '03 (1234) 0001' を探すのは質問の正規表現で十分と思いますが、^
と $
を入れているから文字の一部でなく、完全一致で検索してマッチしなくなっているのではないでしょうか?
^
と $
を消して、re.findall() でマッチしました。
python
1import re
2
3text = """
4Phone: 029-853-6562
5080-1234-0001
6080-1234-00-01
7080 (1234) 0001
803 (1234) 0001
9080 1234 0001
1003 (1234) 0001
11"""
12
13matches = re.findall(r"\d{2,3}\s*(\d{2,4})\s*\d{4}", text)
14for m in matches:
15 print(m)
16# 080 (1234) 0001
17# 03 (1234) 0001
一応、質問に記載のパターンを網羅する以下のテストケースでマッチすることは確認
93 (06) 9594
05 (18)2801
75(04) 9673
36(10)0235
75 (519) 9171
66 (896)5167
32(513) 5681
22(182)0469
08 (1909) 4016
28 (8176)4133
21(7353) 2033
74(9986)2885
559 (83) 1243
884 (30)0413
802(29) 3108
294(19)9571
820 (183) 5471
474 (377)8089
469(338) 3662
232(377)8960
365 (0502) 0929
283 (7282)7854
570(6436) 2704
495(5767)5659