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 random模块(获取随机数)常用方法和使用例子
May 13 Python
python在指定目录下查找gif文件的方法
May 04 Python
python集合用法实例分析
May 30 Python
Python中pip安装非PyPI官网第三方库的方法
Jun 02 Python
Python编程中对文件和存储器的读写示例
Jan 25 Python
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
Aug 23 Python
python画柱状图--不同颜色并显示数值的方法
Dec 13 Python
python实现翻转棋游戏(othello)
Jul 29 Python
浅谈Python_Openpyxl使用(最全总结)
Sep 05 Python
Python实现Word表格转成Excel表格的示例代码
Apr 16 Python
详细分析Python垃圾回收机制
Jul 01 Python
基于Python pyecharts实现多种图例代码解析
Aug 10 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&mysql 日期操作小记
2012/02/27 PHP
Symfony页面的基本创建实例详解
2015/01/26 PHP
windows8.1下Apache+Php+MySQL配置步骤
2015/10/30 PHP
Yii-自定义删除确认弹框(zyd)jquery实现代码
2013/03/04 Javascript
2014 年最热门的21款JavaScript框架推荐
2014/12/25 Javascript
jQuery点缩略图弹出层显示大图片
2015/02/13 Javascript
JavaScript中的prototype原型学习指南
2016/05/09 Javascript
jQuery中的通配符选择器使用总结
2016/05/30 Javascript
Vue.js 2.0窥探之Virtual DOM到底是什么?
2017/02/10 Javascript
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
实例详解vue中的$root和$parent
2019/04/29 Javascript
微信小程序网络层封装的实现(promise, 登录锁)
2019/05/08 Javascript
[01:52]2020年DOTA2 TI10夏季活动预告片
2020/07/15 DOTA
Python利用带权重随机数解决抽奖和游戏爆装备问题
2016/06/16 Python
利用Python命令行传递实例化对象的方法
2016/11/02 Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
2017/09/08 Python
python之matplotlib学习绘制动态更新图实例代码
2018/01/23 Python
Django使用httpresponse返回用户头像实例代码
2018/01/26 Python
python 对dataframe下面的值进行大规模赋值方法
2018/06/09 Python
python远程连接服务器MySQL数据库
2018/07/02 Python
Python中的字符串切片(截取字符串)的详解
2019/05/15 Python
python占位符输入方式实例
2019/05/27 Python
Python封装成可带参数的EXE安装包实例
2019/08/24 Python
jupyter notebook oepncv 显示一张图像的实现
2020/04/24 Python
python实现文法左递归的消除方法
2020/05/22 Python
scrapy-splash简单使用详解
2021/02/21 Python
CSS3中的opacity属性使用教程
2015/08/19 HTML / CSS
HTML5 表单验证失败的提示语问题
2017/07/13 HTML / CSS
UGG雪地靴荷兰官网:UGG荷兰
2016/09/09 全球购物
心碎乌托邦的创业计划书范文
2013/12/26 职场文书
在职党员进社区活动总结
2014/07/05 职场文书
2014机关党员干部“正风肃纪”思想汇报
2014/09/15 职场文书
干部作风整顿自我剖析材料和整改措施
2014/09/18 职场文书
用python画城市轮播地图
2021/05/28 Python
Linux安装apache服务器的配置过程
2021/11/27 Servers
mysql中整数数据类型tinyint详解
2021/12/06 MySQL