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