我正在尝试使用正则表达式匹配电话号码,我已经提出以下代码:
pattern = re.compile("^(1?[2-9]\d{2}([.\-\s])?\d{3}\2\d{4}){1}$")
if pattern.match(phoneNumber):
return True
这应匹配如下数字:
12142142141
1214-444-4444
214.333.3333
但是,这与以上任何一个例子都不匹配。我已经在一些不同的正则表达式验证器上对它进行了测试,并且它们都是成功的。我假设python正则表达式引擎是不同的,但搜索后我找不到差异。有什么建议吗?
答案 0 :(得分:0)
试试这个正则表达式:
^1?(?:(?:\d{10})|(?:\d{3}-\d{3}-\d{4})|(?:\d{3}\.\d{3}\.\d{4}))$
您很可能不希望允许混合分隔符类型,例如如果一个数字不使用分隔符,那么它必须在任何地方都不使用分隔符(对于点和连字符也是如此)。在这种情况下,我们可以使用替换来覆盖三种类型的模式。
在这里演示:
答案 1 :(得分:0)
按照您的代码进行一些小改动:
import re as re
def test(s):
pattern = re.compile("^1?[2-9]\d{2}([.\-\s])?\d{3}\\1?\d{4}$")
return pattern.match(s) is not None
print(test("12142142141")) #True
print(test("1214-444-4444")) #True
print(test("214.333.3333")) #True
print(test("214-333-3333")) #True
print(test("214.333-3333")) #False
所有三个测试用例都通过了。