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 网络编程起步(Socket发送消息)
Sep 06 Python
python自然语言编码转换模块codecs介绍
Apr 08 Python
利用Python破解验证码实例详解
Dec 08 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
Sep 04 Python
python可视化实现代码
Jan 15 Python
详解Django+uwsgi+Nginx上线最佳实战
Mar 14 Python
Python使用crontab模块设置和清除定时任务操作详解
Apr 09 Python
python实现简单日期工具类
Apr 24 Python
python读取指定字节长度的文本方法
Aug 27 Python
Python selenium实现断言3种方法解析
Sep 08 Python
用python-webdriver实现自动填表的示例代码
Jan 13 Python
Python还能这么玩之用Python修改了班花的开机密码
Jun 04 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
《斗罗大陆》六翼天使武魂最强,为什么老千家不是上三宗?
2020/03/02 国漫
PHP中的函数嵌套层数限制分析
2011/06/13 PHP
thinkphp模板继承实例简述
2014/11/26 PHP
php将html转成wml的WAP标记语言实例
2015/07/08 PHP
详解Yii2 rules 的验证规则
2016/12/02 PHP
PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
2018/04/20 PHP
javascript 建设银行登陆键盘
2008/06/10 Javascript
JS在IE和FireFox之间常用函数的区别小结
2010/03/12 Javascript
Javascript 面向对象 命名空间
2010/05/13 Javascript
给ListBox添加双击事件示例代码
2013/12/02 Javascript
LABjs、RequireJS、SeaJS的区别
2014/03/04 Javascript
JavaScript实现twitter puddles算法实例
2014/12/06 Javascript
javascript实现playfair和hill密码算法
2014/12/07 Javascript
AngularJS中isolate scope的用法分析
2016/11/22 Javascript
js弹出窗口简单实现代码
2017/03/22 Javascript
vue v-model实现自定义样式多选与单选功能
2018/07/05 Javascript
bootstrap实现点击删除按钮弹出确认框的实例代码
2018/08/16 Javascript
JS实现的视频弹幕效果示例
2018/08/17 Javascript
js canvas画布实现高斯模糊效果
2018/11/27 Javascript
vue中过滤器filter的讲解
2019/01/21 Javascript
微信打开网址添加在浏览器中打开提示的办法
2019/05/20 Javascript
微信小程序登录对接Django后端实现JWT方式验证登录详解
2019/07/29 Javascript
javascript将扁平的数据转为树形结构的高效率算法
2020/02/27 Javascript
[01:18:43]2014 DOTA2华西杯精英邀请赛5 24 iG VS DK
2014/05/25 DOTA
python 生成不重复的随机数的代码
2011/05/15 Python
详解python 字符串和日期之间转换 StringAndDate
2017/05/04 Python
如何基于python操作json文件获取内容
2019/12/24 Python
Python 爬取必应壁纸的实例讲解
2020/02/24 Python
Python中格式化字符串的四种实现
2020/05/26 Python
python爬虫用scrapy获取影片的实例分析
2020/11/23 Python
Keds加拿大官网:购买帆布运动鞋和皮鞋
2019/09/26 全球购物
一体化教学实施方案
2014/05/10 职场文书
小学校园广播稿(3篇)
2014/09/19 职场文书
致短跑运动员加油稿
2015/07/21 职场文书
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
2021/04/01 PHP
python使用torch随机初始化参数
2022/03/22 Python