Python 实现电话号码和Email地址提取程序
Python 实现电话号码和Email地址提取程序
背景
在日常工作或学习中,我们经常需要从网页或文档中提取信息,比如电话号码和E-mail地址。手动查找和提取这些信息可能会耗费大量时间,而自动化工具可以帮助我们快速完成这个任务。
本篇博客将带你一步步实现一个程序,从剪贴板中提取所有电话号码和E-mail地址,并将它们整理后再复制到剪贴板中。
任务目标
- 从剪贴板取得文本。
- 找出文本中的所有电话号码和E-mail地址。
- 将它们粘贴到剪贴板,以便快速使用。
实现步骤
1. 安装依赖库
我们需要 pyperclip
库来实现从剪贴板复制和粘贴文本。如果你还没有安装 pyperclip
,可以通过以下命令进行安装:
pip install pyperclip
2. 编写程序
接下来,我们将逐步实现该程序:
- 使用
pyperclip
从剪贴板获取文本。 - 编写两个正则表达式,一个匹配电话号码,另一个匹配 E-mail 地址。
- 使用正则表达式提取所有匹配项。
- 将提取到的电话号码和 E-mail 地址整理后粘贴到剪贴板。
- 显示消息,提示用户结果。
3. 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 地址。
相关文章:
Python 实现电话号码和Email地址提取程序
Python 实现电话号码和Email地址提取程序 背景 在日常工作或学习中,我们经常需要从网页或文档中提取信息,比如电话号码和E-mail地址。手动查找和提取这些信息可能会耗费大量时间,而自动化工具可以帮助我们快速完成这个任务。 本篇博客将带…...

JavaGuide(3)
一、项目背景与简介 JavaGuide由GitHub用户Snailclimb开发并维护,是一个全面而深入的Java学习资源库。它旨在为Java初学者和有经验的开发者提供一个系统的学习路径和丰富的资源,帮助他们系统地学习和巩固Java及相关技术知识。 二、项目内容与特点 Jav…...
微信小程序15天
UniApp(Vue3组合式API)和微信小程序15天学习计划 第1天:开发环境配置和基础知识 UniApp和微信小程序概述及对比安装并配置HBuilderX(UniApp)和微信开发者工具创建第一个UniApp Vue3项目和微信小程序项目了解两个平台的项目结构差异配置外部浏览器和各种小程序模拟…...
用Python制作数据可视化仪表盘:使用Dash与Plotly构建实时交互式仪表盘
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在数据驱动的世界中,可视化是理解和解释复杂数据的关键工具。通过数据可视化,用户能够快速洞察数据趋势,做出明智决策。而仪表盘作为一种高度集成的可视化工具,能够将多种数据图表汇总到一个界面上,便于实时…...

干部管理系统:全面提升干部管理效能
数字化浪潮下,干部管理系统作为管理利器,日益凸显其核心价值。该系统全面实现干部信息的数据化,涵盖从基础档案到教育、工作、培训及考核等全方位细节,信息详尽且条理清晰。这不仅极大提升了干部信息查询与更新的效率,…...
Java之方法
方法(函数) Java中的方法必须定义在类或接口中。 package day2;import java.util.Scanner;public class way {public static void main(String[] args) {int arr[] new int[5];Scanner sc new Scanner(System.in);for (int i 0; i < arr.length;…...
MyBatis 数据表与实体映射的隐藏陷阱
这两天在处理一个线上问题时,发现Mybatis数据表和实体映射的时候会埋一个坑。这个问题看似微小,但却可能在关键时刻给我们带来不小的困扰。接下来,让我们深入剖析这个问题,并探究其发生的根源。 一、问题描述 我们在使用 Mybati…...
leetcode-239. 滑动窗口最大值
题目描述 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1: 输入:nums [1,3,-1,-3,5,3,6,…...

springboot项目中开启mybatis的sql日志
在 application.yml 文件中 添加 mybatis-plus 配置,再重启项目,这里用到了mybatis-plus的自带sql日志打印 # application-jdbc.yml mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl如果只是用的mybatis的话&#x…...

卷积的计算——nn.Conv2d(Torch.nn里的Convolution Layers模块里的Conv2d类)
**前置知识: 1、张量和通道 张量:多维数组,用来表示数据(图像、视频等) 通道:图像数据的一部分,表示不同的颜色或特征层 通道只是张量的其中一个维度 以一张RGB图像为例, 该图像…...

确保接口安全:六大方案有效解决幂等性问题
文章目录 六大方案解决接口幂等问题什么是接口幂等?天然幂等不做幂等会怎么样? 解决方案1)insert前先select2)使用唯一索引3)去重表加悲观锁4)加乐观锁之版本号机制5)使用 Redisson 分布式锁6&a…...
代码随想录算法训练营第二十九天| 93. 复原 IP 地址,78. 子集, 90. 子集 II
93. 复原 IP 地址,78. 子集, 90. 子集 II 93. 复原 IP 地址78. 子集90. 子集 II 93. 复原 IP 地址 有效 IP 地址 正好由四个整数(每个整数位于 0 0 0 到 255 255 255之间组成,且不能含有前导 0 0 0),整…...

【WebGis开发 - Cesium】三维可视化项目教程---初始化场景
系列文章目录 【WebGis开发 - Cesium】三维可视化项目教程—图层管理基础【WebGis开发 - Cesium】三维可视化项目教程—视点管理 目录 系列文章目录引言一、Cesium引入项目1.1 下载资源1.2 项目引入Cesium 二、初始化地球2.1 创建基础文件2.1.1 创建Cesium工具方法文件2.1.2 创…...

点云中ICP算法的详解
ICP(Iterative Closest Point)算法是一种用于刚性点云配准的经典算法。其核心思想是通过迭代地寻找两个点云之间的最近点对,并计算最优的刚性变换(包括旋转和平移),使得源点云在目标点云的坐标系下对齐。IC…...

抽象类Abstart Class
抽象类其实就是一种不完全的设计图 必须用abstract修饰 模板方法:建议使用final修饰,不能被重写。...

Redis:通用命令 数据类型
Redis:通用命令 & 数据类型 通用命令SETGETKEYSEXISTSDELEXPIRETTLTYPEFLUSHALL 数据类型 Redis的客户端提供了很多命令用于操控Redis,在Redis中,key的类型都是字符串,而value有多种类型,每种类型都有自己的操作命…...
【Python高级编程】探索Python库:创建引人入胜的交互界面
1.制作交互界面常用到的库 在 Python 中,有多个库可以用于创建交互界面(GUI)。 以下是一些常用的 Python GUI 库: Tkinter: Python 的标准 GUI 库,通常随 Python 一起安装。简单易用,适合快速开发小型应用…...

OpenCV Canny()函数
OpenCV Canny()函数被用来检测图像物体的边缘。其算法原理如下: 高斯滤波:使用高斯滤波器平滑图像以减少噪声。高斯滤波器是一种线性滤波器,可以消除图像中的高频噪声,同时保留边缘信息。计算梯度强度和方向:使用Sobe…...

Java基础(3)
基本数据类型 Java 中的几种基本数据类型了解么? Java 中有 8 种基本数据类型,分别为: 6 种数字类型: 4 种整数型:byte、short、int、long2 种浮点型:float、double1 种字符类型:char1 种布尔…...

【C语言】VS调试技巧
文章目录 什么是bug什么是调试(debug)debug和releaseVS调试快捷键监视和内存观察编程常见错误归类 什么是bug bug本意是“昆虫”或“虫子”,现在一般是指在电脑系统或程序中,隐藏着的一些未被发现的缺陷或问题,简称程…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...

ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...