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获取网页状态码示例
Mar 30 Python
Python中zip()函数用法实例教程
Jul 31 Python
python传递参数方式小结
Apr 17 Python
Python通过matplotlib绘制动画简单实例
Dec 13 Python
Python tkinter的grid布局及Text动态显示方法
Oct 11 Python
对Python 3.2 迭代器的next函数实例讲解
Oct 18 Python
Python3中的最大整数和最大浮点数实例
Jul 09 Python
python selenium 执行完毕关闭chromedriver进程示例
Nov 15 Python
opencv之为图像添加边界的方法示例
Dec 26 Python
python向企业微信发送文字和图片消息的示例
Sep 28 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
Dec 17 Python
关于python中模块和重载的问题
Nov 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
对javascript和select部件的结合运用
2006/10/09 PHP
PHP 编程的 5个良好习惯
2009/02/20 PHP
php 网页游戏开发入门教程一(webgame+design)
2009/10/26 PHP
用PHP读取超大文件的实例代码
2012/04/01 PHP
深入理解PHP中的global
2014/08/19 PHP
php创建、获取cookie及基础要点分析
2015/01/26 PHP
js实现左侧网页tab滑动门效果代码
2015/09/06 Javascript
JavaScript+html5 canvas绘制的圆弧荡秋千效果完整实例
2016/01/26 Javascript
jQuery zTree加载树形菜单功能
2016/02/25 Javascript
Highcharts 多个Y轴动态刷新数据的实现代码
2016/05/28 Javascript
JS实现的手机端精简幻灯片效果
2016/09/05 Javascript
Bootstrap modal 多弹窗之叠加显示不出弹窗问题的解决方案
2017/02/23 Javascript
JS实现课堂随机点名和顺序点名
2017/03/09 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
2017/04/13 Javascript
Vue实现百度下拉提示搜索功能
2017/06/21 Javascript
JS实现table表格固定表头且表头随横向滚动而滚动
2017/10/26 Javascript
Nuxt.js实战详解
2018/01/18 Javascript
JS实现全屏预览F11功能的示例代码
2018/07/23 Javascript
三分钟教你用Node做一个微信哄女友(基友)神器(面向小白)
2019/06/21 Javascript
node.JS的crypto加密模块使用方法详解(MD5,AES,Hmac,Diffie-Hellman加密)
2020/02/06 Javascript
如何基于filter实现网站整体变灰功能
2020/04/17 Javascript
Vue双向绑定实现原理与方法详解
2020/05/07 Javascript
Vue js with语句原理及用法解析
2020/09/03 Javascript
javascript实现左右缓动动画函数
2020/11/25 Javascript
Python实现常见的回文字符串算法
2018/11/14 Python
Python实现的ftp服务器功能详解【附源码下载】
2019/06/26 Python
python绘制雪景图
2019/12/16 Python
python爬虫构建代理ip池抓取数据库的示例代码
2020/09/22 Python
python 基于opencv 绘制图像轮廓
2020/12/11 Python
HTML5的结构和语义(3):语义性的块级元素
2008/10/17 HTML / CSS
生产总经理岗位职责
2013/12/19 职场文书
2014年协会工作总结
2014/11/22 职场文书
离婚起诉书范本
2015/05/18 职场文书
毕业设计答辩开场白
2015/05/29 职场文书
公司中层管理培训心得体会
2016/01/11 职场文书
详解Nginx的超时keeplive_timeout配置步骤
2022/05/25 Servers