python - Python Regex:美国电话号码解析
问题描述
我是正则表达式的新手。
我需要将不同格式的美国电话号码解析为 3 个字符串:区号(没有“()”),接下来的 3 位数字,最后 4 位数字。不 '-'。
我还需要拒绝(消息错误):
916-111-1111(区号后的“-”)(916)111 -1111(“-”前的空格)(916)111-1111(区号内的任何空格)-(916)-必须拒绝也
(a56)111-1111(区号内的任何非数字)
区号缺少“()”
它应该没问题:'(916)111-1111'(除上述之外的任何地方的空格)
这是我的正则表达式:
^\s*\(?(\d{3})[\)\-][\s]*?(\d{3})[-]?(\d{4})\s*$
这花了我2天时间。
它没有失败 916-111-1111(区号后有“-”的可用性)。我敢肯定还有其他一些不足之处。
非常感谢您的帮助。甚至暗示。
有效的:
'(916) 111-1111'
'(916)111-1111 '
' (916) 111-1111'
无效的:
'916-111-1111' - no () or '-' after area code
'(916)111 -1111' - no space before '-'
'( 916)111-1111' - no space inside ()
'(abc) 111-11i1' because of non-digits
解决方案
你可以这样做:
import re
r = r'\((\d{3})\)\s*?(\d{3})\-(\d{4,5})'
l = ['(916) 111-11111', '(916)111-1111 ', ' (916) 111-1111', '916-111-1111', '(916)111 -1111', '( 916)111-1111', '(abc) 111-11i1']
print([re.findall(r, x) for x in l])
# [[('916', '111', '11111')], [('916', '111', '1111')], [('916', '111', '1111')], [], [], [], []]
推荐阅读
- excel - 将重复性任务分成不同的步骤和程序
- c# - 检查文件是否存在并更新表列
- machine-learning - 为了使用NB分类器,特征何时独立?
- c# - 如何减少 Web API Core 中的数据大小?
- php - 如何发送表中的所有行?
- node.js - 从下拉列表中选择第一个元素 [ 选择标签 ] 导致后端崩溃,但选择其他作品就好了
- google-chrome-extension - 是否可以使用 Chrome 的存储区资源管理器扩展来复制我的 OneTab 数据?
- reactjs - React Airbnb 日期选择器自定义年/月导航不需要的年/月跳转
- gnuplot - gnuplot 直方图箱除以体积
- javascript - 如何在 JavaScript 中以及何时编写注释?