python中re的finditer与findall有什么不同

发布时间:2020-11-16 14:06:18

来源:亿速云

阅读:72

作者:Leah

python中re的finditer与findall有什么不同?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

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中find和findall区别_python中re的finditer与findall有什么不同相关推荐

  1. python post与get的区别_python中get和post有什么区别

    更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接: 高州阳光论坛https://www.hnthzk.com/ 人人影视http://www.sfkyty.com ...

  2. python进程线程协程区别_Python中 进程 线程 协程

    一.进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体:在 ...

  3. python多线程和多进程的区别_python中多线程与多进程的区别

    线程的概念: 线程是操作系统中进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程可以有多个线程,每条线程可以同时执行不同的任务.一个 ...

  4. python中str和int区别_python中eval与int的区别浅析

    python中eval和int的区别是什么?下面给大家介绍一下: 1.eval()函数 eval(<字符串>)能够以Python表达式的方式解析并执行字符串,并将返回结果输出.eval() ...

  5. python集合和字典的区别_Python中的字典和集合

    导语:本文章记录了本人在学习Python基础之数据结构篇的重点知识及个人心得,打算入门Python的朋友们可以来一起学习并交流. 本文重点: 1.掌握常见的字典创建,查询,判别方法: 2.了解字典中的 ...

  6. python属性和方法的区别_Python中几种属性访问的区别

    起步 python的提供一系列和属性访问有关的特殊方法:__get__, __getattr__, __getattribute__, __getitem__ .本文阐述它们的区别和用法. 属性的访问 ...

  7. python中sort和sorted区别_Python中的 sort 和 sorted的用法与区别

    今天在做一道题时,因为忘了Python中sort和sorted的用法与区别导致程序一直报错,找了好久才知道是使用方法错误的问题!现在就大致的归纳一下sort和sorted的用法与区别 1. sort: ...

  8. python属性和方法的区别_Python中几种属性访问的区别与用法详解

    起步 在Python中,对于一个对象的属性访问,我们一般采用的是点(.)属性运算符进行操作.例如,有一个类实例对象foo,它有一个name属性,那便可以使用foo.name对此属性进行访问.一般而言, ...

  9. python函数与方法的区别_python中函数和方法有哪些区别

    python中函数和方法有哪些区别 发布时间:2020-11-16 09:30:04 来源:亿速云 阅读:89 作者:小新 小编给大家分享一下python中函数和方法有哪些区别,相信大部分人都还不怎么 ...

最新文章

  1. svn 回归某一个特定版本
  2. mongodb的简单使用
  3. 计算机书籍-实用Python机器学习预测分析
  4. Windows的位图alpha混合技术
  5. 使用.net调用java的Web Services
  6. 可逆神经网络(Invertible Neural Networks)详细解析:让神经网络更加轻量化
  7. ffmpeg与ffserver的协同工作
  8. 转换流指定编码读写文件
  9. 阿里云再发两款混合云一体机 ,企业全面上云就像上车一样简单
  10. 如何在Ubuntu 16.04上使用MySQL 5.6配置Galera集群
  11. 宝宝胆小怎么办,家长怎么做?
  12. Android Studio的使用(四)--生成Get、Set方法
  13. 牛顿法的优缺点及特征
  14. 关于删除/卸载win10自带IE 11浏览器后恢复问题
  15. 数据库系统-关系代数
  16. Java+selenium简单实现web自动化测试
  17. 使用eclipse开发Java Web项目(最最最基础)
  18. oschina 公司已成立
  19. VS-c++播放声音
  20. 2022年10月30日马丁·加德纳聚会线上活动重磅来袭!

热门文章

  1. PHP中如何得到数组的长度
  2. 精品软件介绍 Wireless Network Watcher 中文版 - 防蹭网监视软件
  3. C【talkback.c】演示与用户交互
  4. 海康威视面试(C++研发岗位)
  5. 神州租车java面试题-2016
  6. 长宁区科技小巨人培育企业奖励50万元/家
  7. 【虚幻引擎UE】UE4/UE5 功能性插件推荐及使用介绍 2
  8. 【题解】[ZJOI2007]棋盘制作
  9. 从思维角度去探讨epoll机制
  10. pppoe linux软件,在Ubuntu 18.04上编译安装pppoe客户端软件