《python3廖雪峰》正则表达式匹配Email地址练习题答案
2016-05-24 13:07
465 查看
《python3廖雪峰》正则表达式章节最后留了这个题目,对于初学者还是要折腾一下才能做出来的,我作为初学者,花了1个小时研究出来了,当然只是针对题目中的3种Email地址的正则匹配,如果想写出通用的Email地址正则表达式,就太复杂也没必要了。
先贴上代码,后面再讲解下:
import re regex = r'^(<\w[\s\w]+>\s)?(\w+[\w+.]*@\w+.(org|com)$)' # 题目一:正则匹配 m = re.compile(regex) # 纯Email地址 if m.match('someone@gmail.com'): print('match someone@gmail.com') if m.match('bill.gates@microsoft.com'): print('match bill.gates@microsoft.com') # 带名字的Email地址 if m.match('<Tom Paris> tom@voyager.org'): print('match <Tom Paris> tom@voyager.org') # 题目二:提取带名字的Email地址 m_email = m.match('<Tom Paris> tom@voyager.org').group(2) print(m_email)
输出结果:
讲解:
1.要同时匹配以上3种地址,就要充分考虑共同性,很容易发现第3个地址前面多了“<Tom Paris> ”,注意后面还有一个空格!因此这部分出现0次或1次,也就是(<\w[\s\w]+>\s)?的意义。\w匹配Tom,\s匹配空格,[\s\w]+匹配“
Paris”。最后一个空格用\s匹配。
2.然后就是Email地址本身了。观察知道,第2个其实是包含了第1个地址的,\w+匹配第1个单词不用说了,[\w+.]*匹配后面的单词和小数点,然后是@符号,后面的一样,最后以.com或.org结束,结束符$,开始符^。
3.匹配完了,就是分组提取了。题目要求提取出带名字的Email地址,因此分两组,第1组是前面的名字(<\w[\s\w]+>\s)?,第2组是Email地址(\w+[\w+.]*@\w+.(org|com)$),然后是用re.match的group方法提取出第2个分组。
<span style="font-size:18px;"><strong>虽然做出来了,但是个人感觉这个正则还是有点冗余,然后大神们可以在评论中提出修改意见。</strong></span>
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- msql 正则表达式
- 正则表达式
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例