捕获下面列出的所有电话号码的适当正则表达式应该是什么?我试过一个,它部分地完成了工作。但是,我想得到它们。感谢您的任何建议或帮助。
以下是数字以及我尝试使用的脚本:
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+ 位
