《python3廖雪峰》正则表达式章节最后留了这个题目,对于初学者还是要折腾一下才能做出来的,我作为初学者,花了1个小时研究出来了,当然只是针对题目中的3种Email地址的正则匹配,如果想写出通用的Email地址正则表达式,就太复杂也没必要了。

先贴上代码,后面再讲解下:

import reregex = 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>

《python3廖雪峰》正则表达式匹配Email地址练习题答案相关推荐

  1. 利用Python正则表达式匹配email地址

    正则表达式给予了Python在字符串匹配的过程中极大的方便. 正则顾名思义就是制定一个规则,至于是谁来遵守,Python中无疑是字符串.当我们在制定完一个字符串的表达形式后,所有符合此规则的字符串都可 ...

  2. python正则匹配ip地址_Python正则表达式匹配ip地址实例

    Python正则表达式匹配ip地址实例 更新时间:2014年10月09日 11:22:51 投稿:shichen2014 这篇文章主要介绍了Python正则表达式匹配ip地址实例,通过简单的实例讲述了 ...

  3. java邮箱地址正则表达式_Java 正则表达式匹配邮箱地址

    作者 : 卿笃军 正则表达式中的部分元字符: 元字符 正则表达式中的写法 意义 . . 代表任意一个字符 \d \\d 代表0~9的任何一个数字 \D \\D 代表任何一个非数字字符 \s \\s 代 ...

  4. python re正则提取ip地址_python 正则表达式匹配IP地址

    一.实验环境 1.Windows7x64_SP1 2.anaconda2.5.0 + python2.7(anaconda集成,不需单独安装) 3.pyinstaller3.0 二.实验目的 从tex ...

  5. java正则匹配ip_使用正则表达式匹配IP地址

    如何使用正则表达式匹配IP地址?这是很常见的任务.说难也难,说易也易,取决于在匹配的精确度以及正则表达式复杂度之间很好的折中. 通常,IP地址以点分十进制方式表示,IP地址分为4段,以点号分隔.要对I ...

  6. 《python3廖雪峰》正则表达式提取带名字特殊符号的Email地址

    练习 请尝试写一个验证Email地址的正则表达式.版本一应该可以验证出类似的Email: someone@gmail.com bill.gates@microsoft.com # -*- coding ...

  7. 【linux】函数grep正则表达式匹配邮箱地址

    这个问题是看了很多文章总结而得,还没有了解shell编程的朋友们可以来看看,自己的一些见解,欢迎指出错误和不足.话不多说,我们直接进入主题! 如何直接用命令匹配邮箱地址? 首先我们要知道常见的邮箱格式 ...

  8. java邮箱地址正则表达式_Java 中用正则表达式修改 Email 地址

    需求 系统中有一列会用来存储 email 地址,现在需要对输入的字符串进行过滤, 要求是,把无效的地址过滤掉.有一些需要说明的是 这些地址是通过图像识别得到的,有些是用户自己输入的 已有历史记录已经存 ...

  9. python正则匹配ip地址_python 正则表达式匹配IP地址

    一.实验环境 1.Windows7x64_SP1 2.anaconda2.5.0 + python2.7(anaconda集成,不需单独安装) 3.pyinstaller3.0 二.实验目的 从tex ...

最新文章

  1. python刷新页面_小伙利用Python制作浏览器,网友点评这小伙将来要进腾讯
  2. 深度探索Hyperledger技术与应用之超级账本初体验(附部署代码)
  3. php封装数据库操作类,php简单数据库操作类的封装
  4. 高级C语言教程-C语言函数setjmp()函数
  5. SAP UI5 Web Component for React的图标和图片处理
  6. 根据id删除localstorage数据_原生js利用localstorage实现简易TODO list应用
  7. CentOS 创建SVN 服务器,并且自动同步到WEB 目录
  8. Cookiecutter
  9. 指导行为--数据分析价值之源
  10. 怎么把音频转换文字?三个步骤解决它
  11. 软考架构师 | 01 考试介绍及备考攻略
  12. 六年如逆旅,我亦是行人:一个顾问的六年安全从业经历
  13. 078 周期函数定积分性质及定积分三大性质总结
  14. java中的控制器_SpringMVC基础(一)_控制器
  15. [转]jackson json字符串、map、java对象的转换例子
  16. 蓝桥杯-基础练习-特殊回文数
  17. MySQL学习笔记——第3章 数据表的管理和表中数据操纵
  18. SpringBoot 项目中在Controller 直接调用Mapper,提示:Field mapper in ‘*Controller ‘ required a bean of type ‘*Map
  19. IE11不兼容array.from()解决方法
  20. 读书笔记---将己之欲,施予他人(六)

热门文章

  1. ZPL II 语言编程基础
  2. 【OS】IO系统——设备管理
  3. 江苏计算机三级试卷,江苏省计算机三级(偏硬) 试卷.doc
  4. Python的10种谋生方法,你们都知道了吗?
  5. 概率密度估计--参数估计与非参数估计
  6. bzoj 4455: [Zjoi2016]小星星 树形dp+容斥原理
  7. Android10连接WiFi的方法
  8. 关于网页版伪春菜橘花shell的加载方法研究
  9. SpringBoot 定时任务的实现
  10. BUUCTF misc 专题(32)九连环