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

news/2024/10/16 18:13:13 标签: python, 开发语言

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

背景

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

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

任务目标

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

实现步骤

1. 安装依赖库

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

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 地址。


http://www.niftyadmin.cn/n/5708319.html

相关文章

前端开发攻略---8种方法实现在浏览器中跨页面通信

目录 1、BroadCast Channel 2、Service Worker 3、LocalStorage 4、Shared Worker 5、IndexedDB 6、Cookie 7、Window 8、Websocket 总结&#xff1a; 1、BroadCast Channel 1、创建文件sender.html <!DOCTYPE html> <html lang"zh"><head&g…

idea如何拉取git仓库新的项目,有git仓库地址

在 IntelliJ IDEA 中拉取一个新的 Git 仓库项目&#xff0c;你可以按照以下步骤操作&#xff1a; 打开 IntelliJ IDEA。 如果你还没有打开任何项目&#xff08;即处于欢迎界面&#xff09;&#xff0c;请选择“Get from VCS”&#xff08;从版本控制系统获取&#xff09;。如果…

最经典无人机数据集

在现代科技的浪潮中&#xff0c;无人机技术就像一颗闪亮的星星&#xff0c;吸引了全球的目光。它们不仅在物流、农业、环境监测和灾害救援等领域大显身手&#xff0c;还为商业世界带来了无限可能。然而&#xff0c;随着无人机的数量不断增加&#xff0c;如何有效地管理和利用这…

MySQL 密码忘记了怎么办?

在使用 MySQL 的过程中&#xff0c;有时候我们可能会忘记密码。别担心&#xff0c;本文将详细介绍在 Windows 系统下如何重新设置 MySQL 密码。 一、停止 MySQL 服务 打开“服务”窗口&#xff0c;可以通过在 Windows 搜索栏中输入“服务”来找到并打开它。在服务列表中找到“…

OpenStack服务Swift重启失效(已解决)

案例分析Swift重启失效 1. 报错详情 在重新启动 VMware 虚拟机后&#xff0c;我们发现 OpenStack 的 Swift 服务出现了 503 Service Unavailable 错误。经过排查&#xff0c;问题根源在于 Swift 服务所使用的存储挂载是临时挂载&#xff0c;而非永久挂载。 Swift 服务依赖于…

Visual Studio 2022 配置 Boost 库

一、使用预编译版本 尽量不要使用预编译版本&#xff0c;因为可能构建的不完全&#xff0c;还得重新构建&#xff0c;不如一步到位 1. 下载预编译的 Boost 库 下载&#xff1a;Boost C Libraries - Browse /boost-binaries at SourceForge.net 2. 选择 msvc 版本&#xff0…

【PHP小课堂】一起学习PHP中的反射(一)

一起学习PHP中的反射&#xff08;一&#xff09; 反射这个名词相信大家不会陌生&#xff0c;但反过来说&#xff0c;这个反射到底是一个什么概念呢&#xff1f;其实反射&#xff0c;就是通过一些方法函数&#xff0c;来获得一个类或者一个实例化对象中的一些信息。当然&#xf…

Vue:监听视频播放时长

目录 1、源码2、监听视频实时时长3、监听视频播放时长4、监听视频暂停时长 1、源码 <template><el-dialog class"videoBox" :title"title" :visible.sync"visible" width"40%" :before-close"handleClose" :close…