Python 实现电话号码和Email地址提取程序

Python 实现电话号码和Email地址提取程序

背景

在日常工作或学习中,我们经常需要从网页或文档中提取信息,比如电话号码和E-mail地址。手动查找和提取这些信息可能会耗费大量时间,而自动化工具可以帮助我们快速完成这个任务。

本篇博客将带你一步步实现一个程序,从剪贴板中提取所有电话号码和E-mail地址,并将它们整理后再复制到剪贴板中。

任务目标

  1. 从剪贴板取得文本
  2. 找出文本中的所有电话号码和E-mail地址
  3. 将它们粘贴到剪贴板,以便快速使用。

实现步骤

1. 安装依赖库

我们需要 pyperclip 库来实现从剪贴板复制和粘贴文本。如果你还没有安装 pyperclip,可以通过以下命令进行安装:

bash 复制代码
pip install pyperclip
2. 编写程序

接下来,我们将逐步实现该程序:

  1. 使用 pyperclip 从剪贴板获取文本
  2. 编写两个正则表达式,一个匹配电话号码,另一个匹配 E-mail 地址。
  3. 使用正则表达式提取所有匹配项
  4. 将提取到的电话号码和 E-mail 地址整理后粘贴到剪贴板
  5. 显示消息,提示用户结果。
3. Python 代码实现
python 复制代码
import pyperclip
import re

# 1. 创建电话号码的正则表达式
phone_regex = re.compile(r'''(
    (\d{3}|\(\d{3}\))?              # 区号 (可选)
    (\s|-|\.)?                      # 分隔符 (可选)
    (\d{3})                         # 前三个数字
    (\s|-|\.)                       # 分隔符
    (\d{4})                         # 后四个数字
    (\s*(ext|x|ext.)\s*(\d{2,5}))?  # 分机号 (可选)
)''', re.VERBOSE)

# 2. 创建 E-mail 地址的正则表达式
email_regex = re.compile(r'''(
    [a-zA-Z0-9._%+-]+               # 用户名
    @                               # @ 符号
    [a-zA-Z0-9.-]+                  # 域名
    (\.[a-zA-Z]{2,4})               # 顶级域名
)''', re.VERBOSE)

# 3. 从剪贴板中获取文本
text = pyperclip.paste()

# 4. 在文本中找到所有电话号码和 E-mail 地址
matches = []

# 查找电话号码
for groups in phone_regex.findall(text):
    phone_num = '-'.join([groups[1], groups[3], groups[5]])
    if groups[8] != '':
        phone_num += f' ext{groups[8]}'
    matches.append(phone_num)

# 查找 E-mail 地址
for groups in email_regex.findall(text):
    matches.append(groups[0])

# 5. 如果找到了匹配项,就将它们复制到剪贴板
if matches:
    # 将结果整理成一个字符串,每行一个结果
    results = '\n'.join(matches)
    pyperclip.copy(results)
    print("已找到以下电话号码和E-mail地址,并复制到剪贴板:")
    print(results)
else:
    print("未找到任何电话号码或E-mail地址。")
4. 代码详细说明
  • 正则表达式:

    • 电话号码正则表达式:
      • (\d{3}|\(\d{3}\))?:匹配可选的3位区号,允许括号表示法,如 (123)
      • (\s|-|\.)?:匹配可选的分隔符,如空格、短横线或点号。
      • (\d{3})(\d{4}):匹配电话号码的前3位和后4位数字。
      • (ext|x|ext.)?:匹配可选的分机号,如 ext. 1234
    • E-mail 地址正则表达式:
      • [a-zA-Z0-9._%+-]+:匹配用户名部分,支持字母、数字、点、下划线、百分号等。
      • @:匹配 @ 符号。
      • [a-zA-Z0-9.-]+:匹配域名。
      • (\.[a-zA-Z]{2,4}):匹配顶级域名,如 .com.cn
  • pyperclip:

    • pyperclip.paste():从剪贴板中获取文本。
    • pyperclip.copy():将结果复制到剪贴板。
  • 匹配过程:

    • 通过 phone_regex.findall(text)email_regex.findall(text),找到文本中的所有电话号码和 E-mail 地址。
    • 将所有匹配项整理成字符串,逐行输出并复制到剪贴板。
5. 程序运行示例

假设剪贴板内容如下:

复制代码
Contact us at (123) 456-7890 or 987-654-3210 ext. 123. 
You can also email support@example.com or info@company.com.

程序输出:

复制代码
已找到以下电话号码和E-mail地址,并复制到剪贴板:
123-456-7890
987-654-3210 ext123
support@example.com
info@company.com
6. 未找到匹配时的提示

如果文本中没有电话号码或 E-mail 地址,程序将输出:

复制代码
未找到任何电话号码或E-mail地址。

结论

通过 pyperclip 模块结合正则表达式,可以轻松实现从剪贴板中提取电话号码和 E-mail 地址的程序。这个小工具可以广泛应用于信息采集、数据整理等场景,极大提升工作效率。在实际使用中,你可以根据需要对正则表达式进行扩展,以适应更多格式的电话号码和 E-mail 地址。

相关推荐
_OP_CHEN3 分钟前
C++基础:(九)string类的使用与模拟实现
开发语言·c++·stl·string·string类·c++容器·stl模拟实现
蓝天智能17 分钟前
QT MVC中View的特点及使用注意事项
开发语言·qt·mvc
松果集26 分钟前
【1】数据类型2
python
且慢.58935 分钟前
命令行的学习使用技巧
python
木觞清36 分钟前
喜马拉雅音频链接逆向实战
开发语言·前端·javascript
海琴烟Sunshine1 小时前
leetcode 66.加一 python
python·算法·leetcode
wuxuanok1 小时前
苍穹外卖 —— 公共字段填充
java·开发语言·spring boot·spring·mybatis
偷光1 小时前
浏览器中的隐藏IDE: Console (控制台) 面板
开发语言·前端·ide·php
罗橙7号1 小时前
【pyTorch】关于PyTorch的高级索引机制理解
人工智能·pytorch·python
B站计算机毕业设计之家1 小时前
智能监控项目:Python 多目标检测系统 目标检测 目标跟踪(YOLOv8+ByteTrack 监控/交通 源码+文档)✅
python·yolo·目标检测·目标跟踪·智慧交通·交通·多目标检测