Python实践练习:电话号码和 E-mail 地址提取程序

题目:

假设你有一个无聊的任务,要在一篇长的网页或文章中,找出所有电话号码和邮件地址。如果手动翻页,可能需要查找很长时间。如果有一个程序,可以在剪贴板的文本中查找电话号码和 E-mail 地址,那你就只要按一下 Ctrl-A 选择所有文本,按下 Ctrl-C 将它复制到剪贴板,然后运行你的程序。它会用找到的电话号码和 E-mail地址,替换掉剪贴板中的文本。

测试文本

Skip to main content
Home
Search form

Search

GO!
Topics
Arduino
Art & Design
General Computing
Hacking & Computer Security
Hardware / DIY
JavaScript
Kids
LEGO?
LEGO? MINDSTORMS?
Linux & BSD
Skip to main content
Home
Search form

Search

GO!
Catalog
Media
Write for Us
About Us
Topics
Arduino
Art & Design
General Computing
Hacking & Computer Security
Hardware / DIY
JavaScript
Kids
LEGO?
LEGO? MINDSTORMS?
Linux & BSD
Manga
Minecraft
Programming
Python
Science & Math
Scratch
System Administration
Early Access
Gift Certificates
Free ebook edition with every print book purchased from nostarch.com!
Shopping cart
3 Items    Total: $53.48
View cart Checkout
Contact Us

No Starch Press, Inc.
245 8th Street
San Francisco, CA 94103 USA
Phone: 800.420.7240 or +1 415.863.9900 (9 a.m. to 5 p.m., M-F, PST)
Fax: +1 415.863.9950

Reach Us by Email
General inquiries: [email protected]
Media requests: [email protected]
Academic requests: [email protected] (Please see this page for academic review requests)
Help with your order: [email protected]
Reach Us on Social Media
Twitter
Facebook
Navigation
My account
Log out
Manage your subscription preferences.

About Us  |  ★ Jobs! ★  |  Sales and Distribution  |  Rights  |  Media  |  Academic Requests  |  Conferences  |  Order FAQ  |  Contact Us  |  Write for Us  |  Privacy
Copyright 2018 No Starch Press, Inc

运行后结果

Copied to clipboard:
800-420-7240
415-863-9900
415-863-9950
[email protected]
[email protected]
[email protected]
[email protected]
Hit any key to close this window...

思路

当你开始接手一个新项目时,很容易想要直接开始写代码。但更多的时候,最好是后退一步,考虑更大的图景。我建议先草拟高层次的计划,弄清楚程序需要做什么。暂时不要思考真正的代码,稍后再来考虑。
1.创建电话的正则表达式和创建email的正则表达式
2.匹配剪切板的文本
3.把处理好的文本复制到剪切板

现在开始写程序

#! python3
# phoneAndEmail.py - Finds phone numbers and email addresses on the clipboard.

import re, pyperclip
# 创建电话的正则表达式
phoneRegex = re.compile(r'''(
   (\d{3}|\(d{3}\))?  # 区号可选,444或(444)
   (\s|-|\.)?  # 分隔符:字符或-或. 可选
   (\d{3})  # 三个数字
   (\s|-|\.)?  # 分隔符:字符或-或. 可选
   (\d{4})  # 四个数字
   )''',re.VERBOSE)

# 创建email的正则表达式
emailRegex = re.compile(r'''(
   [a-zA-Z0-9._%+-]+  # username
   @
   [a-zA-Z0-9.-]+  # domail name
   (\.[a-zA-Z]{2,4})  # dot-something
   )''',re.VERBOSE)

# 匹配剪切板的文本
text = str(pyperclip.paste())
matches = []
for groups in phoneRegex.findall(text):
   phoneNum = '-'.join([groups[1], groups[3], groups[6]])
   matches.append(phoneNum)
for groups in emailRegex.findall(text):
   matches.append(groups[0])

# 把处理好的文本复制到剪切板
if len(matches) > 0:
   pyperclip.copy('\n'.join(matches))
   print('Copied to clipboard:')
   print('\n'.join(matches))
else:
   print('No phone numbers or email addresses found.')

分析代码

re.VERBOSE是让正则表达式中可以忽略注释和空白符的一个参数。verbose表示冗杂的意思,就是可以让你添些注释,对正则更可读。
正则表达式详见:Python正则

另一个坑就是groups了,原来我没有理解groups与group的区别
group()是截取分组的意思,例子:

import re
a = "123abc456"
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0)   #123abc456,返回整体
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1)   #123
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2)   #abc
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3)   #456

groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
代码中phoneNum = ‘-‘.join([groups[1], groups[3], groups[6]])中的groups是一个变量,别看错了。

原文地址:https://www.cnblogs.com/wudongwei/p/8992418.html

时间: 2024-11-02 16:44:35

Python实践练习:电话号码和 E-mail 地址提取程序的相关文章

Python学习手册之正则表达式示例--邮箱地址提取

在上一篇文章中,我们介绍了 Python 的捕获组和特殊匹配字符串,现在我们介绍 Python 的正则表达式使用示例.查看上一篇文章请点击:https://www.cnblogs.com/dustman/p/10040430.html 邮箱地址提取为了演示正则表达式的示例用法,我们创建一个从字符串中提取电子邮箱地址的程序.假设我们有一个包含电子邮箱地址的字符串. string = "Please contact [email protected] for assistance" 我们希

[python]小练习__创建你自己的命令行 地址簿 程序

创建你自己的命令行 地址簿 程序. 在这个程序中,你可以添加.修改.删除和搜索你的联系人(朋友.家人和同事等等)以及它们的信息(诸如电子邮件地址和/或电话号码). 这些详细信息应该被保存下来以便以后提取. python version 3.4.3 1 #创建你自己的命令行 地址簿 程序.在这个程序中, 2 #你可以添加.修改.删除和搜索你的联系人(朋友.家人和同事等等) 3 #以及它们的信息(诸如电子邮件地址和/或电话号码). 4 #这些详细信息应该被保存下来以便以后提取. 5 # python

分享《深入浅出深度学习:原理剖析与python实践》PDF+源代码

下载:https://pan.baidu.com/s/1H4N0W5sPOE7YlK0KyC7TZQ 更多资料分享:http://blog.51cto.com/3215120 <深入浅出深度学习原理剖析与python实践>PDF,带目录书签,357页,文字可以复制粘贴:配套源代码.经典书籍,讲解详细. 如图所示: 原文地址:http://blog.51cto.com/3215120/2314178

Python 编程快速上手 让繁琐工作自动化-第十一章实践项目 11.11.1命令行邮件程序

11.11.1 命令行邮件程序 编写一个程序,通过命令行接受电子邮件地址和文本字符串.然后利用selenium登录到你的邮件账号,将该字符串作为邮件,发送到提供的地址(你也许希望为这个程序建立一个独立的邮件账号).这是为程序添加通知功能的一种好方法.你也可以编写类似的程序,从Facebook 或Twitter 账号发送消息.这个项目弄了好几天,头都快炸了,终于弄好了代码如下:#!/usr/bin/env python#encoding:utf-8 '''@author:Kevinbr/>@aut

学习参考+《深度学习基于Keras的Python实践》PDF+ 源代码+魏贞原

深度学习学习框架有tensorflow.pytorch.keras.学习keras时,推荐<深度学习:基于Keras的Python实践>,适合深度学习入门和实践. 尤其是第三部分,利用卷积神经网络解决情感分析问题比较好. <深度学习:基于Keras的Python实践>系统讲解了深度学习的基本知识,以及使用深度学习解决实际问题,详细介绍了如何构建及优化模型,并针对不同的问题给出不同的解决方案,通过不同的例子展示了在具体项目中的应用和实践经验. 推荐参考:<深度学习:基于Kera

机器学习算法与Python实践之(三)支持向量机(SVM)进阶

机器学习算法与Python实践之(三)支持向量机(SVM)进阶 机器学习算法与Python实践之(三)支持向量机(SVM)进阶 [email protected] http://blog.csdn.net/zouxy09 机器学习算法与Python实践这个系列主要是参考<机器学习实战>这本书.因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学习算法.恰好遇见这本同样定位的书籍,所以就参考这本书的过程来学习了. 在这一节我们主要是

机器学习算法与Python实践之(四)支持向量机(SVM)实现

机器学习算法与Python实践之(四)支持向量机(SVM)实现 机器学习算法与Python实践之(四)支持向量机(SVM)实现 [email protected] http://blog.csdn.net/zouxy09 机器学习算法与Python实践这个系列主要是参考<机器学习实战>这本书.因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学习算法.恰好遇见这本同样定位的书籍,所以就参考这本书的过程来学习了. 在这一节我们主要是

机器学习算法与Python实践之(二)支持向量机(SVM)初级

机器学习算法与Python实践之(二)支持向量机(SVM)初级 机器学习算法与Python实践之(二)支持向量机(SVM)初级 [email protected] http://blog.csdn.net/zouxy09 机器学习算法与Python实践这个系列主要是参考<机器学习实战>这本书.因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学习算法.恰好遇见这本同样定位的书籍,所以就参考这本书的过程来学习了. 在这一节我们主要是

机器学习算法与Python实践之(七)逻辑回归(Logistic Regression)

机器学习算法与Python实践这个系列主要是参考<机器学习实战>这本书.因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学习算法.恰好遇见这本同样定位的书籍,所以就参考这本书的过程来学习了. 这节学习的是逻辑回归(Logistic Regression),也算进入了比较正统的机器学习算法.啥叫正统呢?我概念里面机器学习算法一般是这样一个步骤: 1)对于一个问题,我们用数学语言来描述它,然后建立一个模型,例如回归模型或者分类模型等