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模块之StringIO使用示例
Apr 08 Python
win系统下为Python3.5安装flask-mongoengine 库
Dec 20 Python
python实现批量修改文件名代码
Sep 10 Python
Python实现的双色球生成功能示例
Dec 18 Python
Tornado 多进程实现分析详解
Jan 12 Python
Python面向对象进阶学习
May 21 Python
python计算二维矩形IOU实例
Jan 18 Python
pandas中ix的使用详细讲解
Mar 09 Python
使用 prometheus python 库编写自定义指标的方法(完整代码)
Jun 29 Python
python实现图片转字符画的完整代码
Feb 21 Python
pytorch中的model.eval()和BN层的使用
May 22 Python
总结三种用 Python 作为小程序后端的方式
May 02 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下使用iconv需要注意的问题
2010/11/20 PHP
PHP调用Webservice实例代码
2011/07/29 PHP
php中通过curl模拟登陆discuz论坛的实现代码
2012/02/16 PHP
深入file_get_contents函数抓取内容失败的原因分析
2013/06/25 PHP
测试php连接mysql是否成功的代码分享
2014/01/24 PHP
日常整理PHP中简单的图形处理(经典)
2015/10/26 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
2017/10/11 PHP
js字符编码函数区别分析
2008/06/05 Javascript
基于Jquery的仿照flash放大图片效果代码
2011/03/16 Javascript
javascript中indexOf技术详解
2015/05/07 Javascript
javascript实现网站加入收藏功能
2015/12/16 Javascript
基于JavaScript短信验证码如何实现
2016/01/24 Javascript
使用jquery.qrcode.min.js实现中文转化二维码
2016/03/11 Javascript
Bootstrap3学习笔记(三)之表格
2016/05/20 Javascript
js控件Kindeditor实现图片自动上传功能
2020/07/20 Javascript
Bootstrap3制作搜索框样式的方法
2016/07/11 Javascript
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
js实现把图片的绝对路径转为base64字符串、blob对象再上传
2016/12/29 Javascript
快速实现JS图片懒加载(可视区域加载)示例代码
2017/01/04 Javascript
详解在AngularJS的controller外部直接获取$scope
2017/06/02 Javascript
JS异步函数队列功能实例分析
2017/11/28 Javascript
JS实现统计字符串中字符出现个数及最大个数功能示例
2018/06/04 Javascript
React 使用recharts实现散点地图的示例代码
2018/12/07 Javascript
详解vue 自定义marquee无缝滚动组件
2019/04/09 Javascript
Vue源码之关于vm.$delete()/Vue.use()内部原理详解
2019/05/01 Javascript
python使用xlrd与xlwt对excel的读写和格式设定
2017/01/21 Python
Zookeeper接口kazoo实例解析
2018/01/22 Python
Python装饰器模式定义与用法分析
2018/08/06 Python
Python OpenCV之图片缩放的实现(cv2.resize)
2019/06/28 Python
简单了解Python生成器是什么
2019/07/02 Python
英国最大的线上保健品零售商之一:Vitamin Planet
2016/12/01 全球购物
联想新西兰官方网站:Lenovo New Zealand
2018/10/30 全球购物
小学教师办公室制度
2014/02/03 职场文书
四风问题查摆材料
2014/08/25 职场文书
年底个人总结范文
2015/03/10 职场文书
公司车队管理制度
2015/08/04 职场文书