Python Regex给出假阴性

时间:2017-04-20 01:43:43

标签: python regex

我正在尝试使用正则表达式匹配电话号码,我已经提出以下代码:

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正则表达式引擎是不同的,但搜索后我找不到差异。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

试试这个正则表达式:

^1?(?:(?:\d{10})|(?:\d{3}-\d{3}-\d{4})|(?:\d{3}\.\d{3}\.\d{4}))$

您很可能不希望允许混合分隔符类型,例如如果一个数字不使用分隔符,那么它必须在任何地方都不使用分隔符(对于点和连字符也是如此)。在这种情况下,我们可以使用替换来覆盖三种类型的模式。

在这里演示:

Regex101

答案 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

所有三个测试用例都通过了。