使用正则表达式将电话号码验证和解析成3个值

3
我正在尝试解析电话号码,格式为“(222) 555-2333”,即用括号括起来的三位区号,后跟以三个连字符分隔的七位本地号码。它还应忽略所有前导和尾随空格,以及出现在区号和本地号码之间的任何空格。但是,它不应接受区号中的任何空格(例如,在“(222)”中)也不应该在七位数字的本地号码中有空格。
这是我到目前为止写的内容。对于“(800) 121-2121”它可以工作,但对于“(333)122-2222”失败了。我尝试在模式开头添加\s,但这也没有帮助。您有任何想法我哪里出错了吗?
import re
s = "   (333)   122-2222"
reg = re.compile(r'^\((\d{3})\)\s*(\d{3})-(\d{4})$')
test = bool(re.match(reg,s))
if test:
   reg.search(s).groups() 
else:
   ValueError

还有,我能否在只有特殊字符时处理空格? 在这种情况下,(404) 555-1212 是可以的,但是正则表达式需要拒绝 404 555-1212。 - aseem puri
2个回答

0

你只需要检查开头的空格即可,

import re
s = "   (333)   122-2222"
reg = re.compile(r'^\s*\((\d{3})\)\s*(\d{3})-(\d{4})$')
test = bool(re.match(reg,s))
if test:
   reg.search(s).groups() 
else:
   ValueError

0

嘿,我明白你的问题了。我认为你应该在代码之间也搜索空格。 只需添加更多的\s*,你就可以解决它了

import re
s = "   (333)   122-2222"
reg = re.compile(r'^\s*\((\d{3})\)\s*(\d{3})\s*-\s*(\d{4})\s*$')
test = bool(re.match(reg,s))
if test:
   reg.search(s).groups() 
else:
   ValueError

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接