首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python给出假阴性

Python给出假阴性
EN

Stack Overflow用户
提问于 2017-04-20 01:43:42
回答 2查看 102关注 0票数 0

我正在尝试调整匹配电话号码,并提出了以下代码:

代码语言:javascript
运行
复制
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

但是,这与上述任何一个示例都不匹配。我已经在几个不同的regex验证器上测试了这一点,它们都是成功的。我假设python引擎是不同的,但是在搜索之后我找不到不同之处。有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-20 01:51:47

按照您的代码,做几个小更改:

代码语言:javascript
运行
复制
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

三个测试用例都通过了。

票数 0
EN

Stack Overflow用户

发布于 2017-04-20 01:49:35

试试这个正则表达式:

代码语言:javascript
运行
复制
^1?(?:(?:\d{10})|(?:\d{3}-\d{3}-\d{4})|(?:\d{3}\.\d{3}\.\d{4}))$

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

演示这里:

Regex101

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43508796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档