python re的findall和finditer的区别详解

作者:_假象 时间:2022-05-19 23:04:33 

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()代表整个正则的匹配

实际中我们根据我们的需求选择方法既可。

来源:https://blog.csdn.net/wali_wang/article/details/50623991

标签:python,re.findall,re.finditer
0
投稿

猜你喜欢

  • python导入pandas具体步骤方法

    2022-08-14 16:01:03
  • vue2.x el-table二次封装实现编辑修改

    2023-07-02 16:29:17
  • 利用golang进行OpenCV学习和开发的步骤

    2024-05-22 10:16:56
  • python线程优先级队列知识点总结

    2022-01-04 21:25:46
  • 网页代码更清晰高效的一些经验

    2008-05-19 12:23:00
  • numpy返回array中元素的index方法

    2023-10-04 22:43:10
  • Mysql逗号拼接字符串的关联查询以及统计问题

    2024-01-28 12:15:03
  • 基于PyTorch实现EdgeCNN的实战教程

    2023-12-30 22:28:20
  • vue 遮罩层阻止默认滚动事件操作

    2024-04-30 08:42:25
  • 三行代码使用Python将视频转Gif的方法示例

    2021-02-28 13:53:39
  • tensorflow训练中出现nan问题的解决

    2023-02-10 09:34:09
  • Python数据分析库pandas高级接口dt的使用详解

    2023-12-02 22:33:19
  • python使用tornado实现简单爬虫

    2022-07-07 12:03:08
  • 在PHP中读取和写入WORD文档的代码

    2023-09-28 02:30:22
  • 浅析Golang中的内存逃逸

    2024-05-05 09:28:21
  • python多进程基础详解

    2021-07-14 10:06:52
  • python使用opencv resize图像不进行插值的操作

    2023-09-12 15:04:25
  • 一个滑动门菜单例子源码

    2007-12-31 10:16:00
  • MySQL外键约束详解

    2024-01-28 11:30:00
  • npm全局环境变量配置详解

    2024-05-03 15:54:58
  • asp之家 网络编程 m.aspxhome.com