我是靠谱客的博主 强健耳机,最近开发中收集的这篇文章主要介绍python中findall_python re的findall和finditer的区别详解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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博客!

最后

以上就是强健耳机为你收集整理的python中findall_python re的findall和finditer的区别详解的全部内容,希望文章能够帮你解决python中findall_python re的findall和finditer的区别详解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部