python re的findall和finditer的区别详解


Posted in Python onNovember 15, 2020

python正则模块re中findall和finditer两者相似,但却有很大区别。 

两者都可以获取所有的匹配结果,这和search方法有着很大的区别,同时不同的是一个返回list,一个返回一个MatchObject类型的iterator

假设我们有这样的数据:其中数字代表电话号,xx代表邮箱类型

content = '''email:12345678@163.com
email:2345678@163.com
email:345678@163.com
'''

需求:(正则没有分组)提取所有的邮箱信息

result_finditer = re.finditer(r"\d+@\w+.com", content)
#由于返回的为MatchObject的iterator,所以我们需要迭代并通过MatchObject的方法输出
for i in result_finditer :
  print i.group()

result_findall = re.findall(r"\d+@\w+.com", content)
#返回一个[] 直接输出or或者循环输出
print result_findall
for i in result_findall :
  print i

需求:(正则有分组)提取出来所有的电话号码和邮箱类型

result_finditer = re.finditer(r"(\d+)@(\w+).com", content)
#正则有两个分组,我们需要分别获取分区,分组从0开始,group方法不传递索引默认为0,代表了整个正则的匹配结果
for i in result_finditer :
  phone_no = i.group(1)
  email_type = i.group(2)

result_findall = re.findall(r"(\d+)@(\w+).com", content)
#此时返回的虽然为[],但不是简单的[],而是一个tuple类型的list 
#如:[('12345678', '163'), ('2345678', '163'), ('345678', '163')]
for i in result_findall :
  phone_no = i[0]
  email_type = i[1]

命名分组和非命名分组的情况是一样的。

findall注意点:

1.当正则没有分组是返回的就是正则的匹配

re.findall(r"\d+@\w+.com", content)
['2345678@163.com', '2345678@163.com', '345678@163.com']

2.有一个分组返回的是分组的匹配而不是整个正则的匹配

re.findall(r"(\d+)@\w+.com", content)
['2345678', '2345678', '345678']

3.多个分组时将分组装到tuple中 返回

re.findall(r"(\d+)@(\w+).com", content)
[('2345678', '163'), ('2345678', '163'), ('345678', '163')]

因此假如我们需要拿到整个正则和每个分组的匹配,使用findall我们需要将整个正则作为一个分组

re.findall(r"((\d+)@(\w+).com)", content)
[('2345678@163.com', '2345678', '163'), ('2345678@163.com', '2345678', '163'), ('345678@163.com', '345678', '163')]

而使用finditer我们无需手动将整个正则用()括起来group()代表整个正则的匹配

实际中我们根据我们的需求选择方法既可。

到此这篇关于python re的findall和finditer的区别详解的文章就介绍到这了,更多相关python re的findall和finditer内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python的print用法示例
Feb 11 Python
学习python类方法与对象方法
Mar 15 Python
详解python并发获取snmp信息及性能测试
Mar 27 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
Nov 01 Python
聊聊Python中的pypy
Jan 12 Python
Python实现基于C/S架构的聊天室功能详解
Jul 07 Python
解决import tensorflow as tf 出错的原因
Apr 16 Python
5行Python代码实现图像分割的步骤详解
May 25 Python
在keras里实现自定义上采样层
Jun 28 Python
Python为何不支持switch语句原理详解
Oct 21 Python
Python内置数据结构列表与元组示例详解
Aug 04 Python
python使用pycharm安装pyqt5以及相关配置
Apr 22 Python
Python获取android设备cpu和内存占用情况
Nov 15 #Python
Python __slots__的使用方法
Nov 15 #Python
Python descriptor(描述符)的实现
Nov 15 #Python
基于OpenCV的网络实时视频流传输的实现
Nov 15 #Python
彻底解决Python包下载慢问题
Nov 15 #Python
Python eval函数原理及用法解析
Nov 14 #Python
Django怎么在admin后台注册数据库表
Nov 14 #Python
You might like
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
2017/05/04 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
JS BASE64编码 window.atob(), window.btoa()
2021/03/09 Javascript
13个绚丽的Jquery 界面设计网站推荐
2010/09/28 Javascript
createElement与createDocumentFragment的点点区别小结
2011/12/19 Javascript
关于JS控制代码暂停的实现方法分享
2012/10/11 Javascript
Javascript动画效果(2)
2016/10/11 Javascript
AngularJS使用带属性值的ng-app指令实现自定义模块自动加载的方法
2017/01/04 Javascript
js+html5实现页面可刷新的倒计时效果
2017/07/15 Javascript
Vue侧滑菜单组件——DrawerLayout
2017/12/18 Javascript
js 实现复选框只能选择一项的示例代码
2018/01/23 Javascript
基于axios封装fetch方法及调用实例
2018/02/05 Javascript
vue-router 源码之实现一个简单的 vue-router
2018/07/02 Javascript
layui使用label标签的方法
2019/09/14 Javascript
Servlet返回的数据js解析2种方法
2019/12/12 Javascript
vue+Element-ui实现分页效果
2020/11/15 Javascript
[37:35]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第二局
2016/02/25 DOTA
[06:53]2018DOTA2国际邀请赛寻真——勇于创新的Vici Gaming
2018/08/14 DOTA
Python正则获取、过滤或者替换HTML标签的方法
2016/01/28 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
2016/06/14 Python
Python request设置HTTPS代理代码解析
2018/02/12 Python
python删除文本中行数标签的方法
2018/05/31 Python
Python解决pip install时出现的Could not fetch URL问题
2019/08/01 Python
Flask框架学习笔记之消息提示与异常处理操作详解
2019/08/15 Python
使用tensorflow显示pb模型的所有网络结点方式
2020/01/23 Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
2020/04/24 Python
35款精致的 CSS3 和 HTML5 网页模板 推荐
2012/08/03 HTML / CSS
巴西婴儿用品商店:Bebe Store
2017/11/23 全球购物
化石印度尼西亚在线商店:Fossil Indonesia
2019/03/11 全球购物
50道外企软件测试面试题
2014/08/18 面试题
ktv总经理岗位职责
2014/02/17 职场文书
迎元旦广播稿
2014/02/22 职场文书
药剂专业个人求职信范文
2014/04/29 职场文书
离婚起诉书范文2016
2015/11/26 职场文书
2016年学校禁毒宣传活动工作总结
2016/04/05 职场文书
Python 实现Mac 屏幕截图详解
2021/10/05 Python