python - 我想写一个正则表达式来匹配不同风格的电话号码
问题描述
我想搜索文本中的所有电话号码。在本文中,我发现了 4 种不同格式的电话号码:
1234567890
123-456-7890
123 456 7890
(123)456-7890
我写了一个正则表达式模式并在 python 中尝试:
\(?\d{3}[\)\s-]?\d{3}[\s-]?\d{4}
此模式有效,我可以使用它从文本中搜索所有电话号码。但是,它也匹配一些错误的格式,例如“(1234567890”、“123)456-7890”和更多错误的格式。我是正则表达式的新手。你能帮我解决这个问题吗?衷心感谢。
解决方案
您可以从这里开始。
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)
推荐阅读
- amazon-web-services - 查找安装在 Amazon Linux 2 上的 NGINX 的源代码
- python - 如何在不影响梯度的情况下更改 NN 权重?
- c# - 在这种情况下如何正确地从字符串中提取小数?
- google-apps-marketplace - 如何通过在另一个域上列入白名单并跳过安全评估来在谷歌市场上发布第三方插件
- python - TensorBoard:在 tensorboard 页面上放一个标题
- c++ - 抽象基类的 C++ 模板特化
- python - Django 将详细视图上的下一篇文章和上一篇文章限制为仅处于活动状态
- python - Read from top of text file that I use to store login username and password
- python - After installing anaconda, my laptop acts as though it doesn't exist
- security - E_ACCESSDENIED when creating a host-only interface on virtualbox via vagrant