Skip to main content
 首页 » 编程设计

python之无法捕获具有不同模式的某些电话号码

2025年05月04日21pander-it

捕获下面列出的所有电话号码的适当正则表达式应该是什么?我试过一个,它部分地完成了工作。但是,我想得到它们。感谢您的任何建议或帮助。

以下是数字以及我尝试使用的脚本:

import re 
 
content='''   
415-555-1234 
650-555-2345 
(416)555-3456 
202 555 4567 
4035555678 
1 416 555 9292 
+1 416 555 9292 
''' 
for phone in re.findall(r'\+?1?\s?\(?\d*\)?[\s-]\d*[\s-]\d*',content): 
  print(phone) 

我得到的结果是:

415 
-555-1234 
 
650-555-2345 
555-3456 
202 
 555 4567 
4035555678 
 
1 416 555 
 9292 
 
+1 416 555 9292 

请您参考如下方法:

我建议强制使用正则表达式的某些部分(例如数字模式,将 * 替换为 +),否则它可能会匹配文本中无意义的部分。另外,请注意 \s 匹配任何空格,而您很可能希望匹配同一行上的字符串。

你可以试试

\+?1? ?(?:\(?\d+\)?)?(?:[ -]?\d+){1,2} 

参见 regex demo

详情

  • \+? - 一个可选的加号
  • 1? - 可选的 1
  • ? - 和可选空格
  • (?:\(?\d+\)?)? - 可选的 序列(,然后是 1+ 位数字,然后是可选的 )
  • (?:[ -]?\d+){1,2} - 出现 1 或 2 次:
    • [ -]? - 可选空格或 -
    • \d+ - 1+ 位