前言
本项目是为了练习所学的正则表达式与模式匹配,练习参考书籍《Python编程快速上手——让繁琐工作自动化》,在原本项目上进行了个性化修改。
——
一、问题背景
假设有这样一个无聊的任务,在一篇很长的网页或者文章中找到所有的电话号码、手机号码和邮箱地址。
我们需要设计一个程序来帮助我们在剪贴板中快速查找一篇长文档中所有号码和邮箱地址,并整整齐齐地打印出来。
大致的流程是这样的:
我们按一下Ctrl+A全选文本,再用Ctrl+C将它复制到剪贴板,然后运行程序,最终电话号码、手机号码、邮箱地址就会整整齐齐在显示窗口打印出来。
——
二、功能分析
第一步:构建正则表达式
- 构建电话号码、手机号码和邮箱地址三个正则表达式
- 我们必须知道三个内容的组成形式,且尽可能完整涵盖所有形式的号码和邮箱
第二步:进行正则匹配
- 利用pyperclip获得文本内容
- 对三个正则表达式进行匹配,使用findall()找到所有匹配
- 将匹配到内容进行格式统一整理,再分别依次添加到列表里面,方便后面的打印操作
第三步:打印结果
- 整齐打印电话号码、手机号码和邮箱地址三个内容
- 如果没有找到匹配内容,则显示没有找到的消息
框架如下:
import re
import pyperclip
# 第一步:构建正则表达式
# 【01】创建电话号码的正则表达式
# 【02】创建手机号码的正则表达式
# 【03】创建邮箱的正则表达式
# 第二步:进行正则匹配
# 第三步:打印结果
——
三、代码实现
那么就直接上代码,具体的注释在代码中写明
import re
import pyperclip
# 第一步:构建正则表达式
# 创建电话号码的正则表达式
phoneRegex = re.compile(r'''(
(\d{3}|\(\d{3}\)) # 3位数字或者带括号的3位数字
(\s|-)? # 分隔符:空格或者-(匹配0次或1次)
(\d{3}) # 3位数字
(\s|-) # 分隔符:空格或者-
(\d{4}) # 4位数字
)''',re.VERBOSE) # re.VERB