首页 > 解决方案 > 我想写一个正则表达式来匹配不同风格的电话号码

问题描述

我想搜索文本中的所有电话号码。在本文中,我发现了 4 种不同格式的电话号码:

1234567890
123-456-7890
123 456 7890
(123)456-7890

我写了一个正则表达式模式并在 python 中尝试:

\(?\d{3}[\)\s-]?\d{3}[\s-]?\d{4}

此模式有效,我可以使用它从文本中搜索所有电话号码。但是,它也匹配一些错误的格式,例如“(1234567890”、“123)456-7890”和更多错误的格式。我是正则表达式的新手。你能帮我解决这个问题吗?衷心感谢。

标签: pythonregex

解决方案


您可以从这里开始。

numbers = """
1234567890
123-456-7890
123 456 7890
(123)456-7890
(1234567890
 123)456-7890
"""

import re

patterns = [
    r'\d{10}',
    r'\d{3}[ -]\d{3}[ -]\d{4}',
    r'\(\d{3}\)\d{3}-\d{4}',
]
patterns = [re.compile(p) for p in patterns]
results = []
for line in numbers.split('\n'):
    for p in patterns:
        match = p.match(line)
        if match:
            results.append(line)

推荐阅读