Python实践练习:电话号码和 E-mail 地址提取程序,,题目:假设你有一个无
Python实践练习:电话号码和 E-mail 地址提取程序,,题目:假设你有一个无
题目:
假设你有一个无聊的任务,要在一篇长的网页或文章中,找出所有电话号码和邮件地址。如果手动翻页,可能需要查找很长时间。如果有一个程序,可以在剪贴板的文本中查找电话号码和 E-mail 地址,那你就只要按一下 Ctrl-A 选择所有文本,按下 Ctrl-C 将它复制到剪贴板,然后运行你的程序。它会用找到的电话号码和 E-mail地址,替换掉剪贴板中的文本。
测试文本
Skip to main contentHomeSearch formSearchGO!TopicsArduinoArt & DesignGeneral ComputingHacking & Computer SecurityHardware / DIYJavaScriptKidsLEGO?LEGO? MINDSTORMS?Linux & BSDSkip to main contentHomeSearch formSearchGO!CatalogMediaWrite for UsAbout UsTopicsArduinoArt & DesignGeneral ComputingHacking & Computer SecurityHardware / DIYJavaScriptKidsLEGO?LEGO? MINDSTORMS?Linux & BSDMangaMinecraftProgrammingPythonScience & MathScratchSystem AdministrationEarly AccessGift CertificatesFree ebook edition with every print book purchased from nostarch.com!Shopping cart3 Items Total: $53.48View cart CheckoutContact UsNo Starch Press, Inc.245 8th StreetSan Francisco, CA 94103 USAPhone: 800.420.7240 or +1 415.863.9900 (9 a.m. to 5 p.m., M-F, PST)Fax: +1 415.863.9950Reach Us by EmailGeneral 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 MediaTwitterFacebookNavigationMy accountLog outManage your subscription preferences.About Us | ★ Jobs! ★ | Sales and Distribution | Rights | Media | Academic Requests | Conferences | Order FAQ | Contact Us | Write for Us | PrivacyCopyright 2018 No Starch Press, Inc
运行后结果
Copied to clipboard:800-420-7240415-863-9900415-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 rea = "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) #123print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2) #abcprint re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3) #456
groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
代码中phoneNum = ‘-‘.join([groups[1], groups[3], groups[6]])中的groups是一个变量,别看错了。
Python实践练习:电话号码和 E-mail 地址提取程序
相关内容
- python nose测试框架全面介绍十---用例的跳过,pythonnose
- PAT 1084 外观数列python解法,patpython,外观数列是指具有以
- Python-OpenCV —— 基本操作详解,,OpenCV是一个基
- python 操作excel格式化及outlook正文,发送邮件,,import
- Python “图灵机器人”对话交互,,1、创建图灵机器人账
- Windows下 Python Selenium PhantomJS 抓取网页并截图,,安装P
- Mac Sublime Text 3 配置Python环境及安装插件,sublimepython,一
- 用python进行对乒乓球的比赛分析,并且将该程序进行封
- Python+Flask+MysqL的web建设技术开发一个网站,,一、摘要
- Python之进程、线程、协程篇,,本节内容操作系统发展
评论关闭