我是靠谱客的博主 醉熏糖豆,最近开发中收集的这篇文章主要介绍Python进阶之路 高级编程 正则表达式-使用findall和finditer查找每一次出现的位置,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

使用findall和finditer查找每一次出现的位置

findall函数用于查询字符串中某个正则表达式模式全部的非重复出现的情况,这一点与search函数在执行字符串搜索时类似,但与match函数和search函数不同之处在于,findall函数总是返回一个包含搜索结果的列表。如果findall函数没有找到匹配的部分,就会返回一个空列表,如果匹配成功,列表将包含所有成功的匹配部分(从左到右按匹配顺序排列)。

import re
result = re.findall('bike','bike')
print(result)
result = re.findall('bike','My bike')
print(result)
result = re.findall('bike','This is a bike. This is my bike.')
print(result)

输出结果:

['bike']
['bike']
['bike', 'bike']

finditer函数在功能上与findall函数类似,只是更节省内存。这两个函数的区别是findall函数会将所有匹配的结果一起通过列表返回,而finditer函数会返回一个迭代器,只有对finditer函数返回结果进行迭代,才会对字符串中某个正则表达式模式进行匹配。findall函数与finditer函数相当于读取XML文档的两种技术:DOM和SAX。前者更灵活,但也更耗内存资源;后者顺序读取XML文档的内容,不能随机读取XML文档中的内容,但更节省内存资源。

[例 11.9] 本例演示了findall函数和finditer函数的用法,可以通过本例的代码对这两个函数进行对比。

import re
s = '12-a-abc54-a-xyz---78-A-ytr'
result = re.findall(r'dd-a-[a-z]{3}',s)
print(result)
result = re.findall(r'(dd)-a-([a-z]{3})',s)
print(result)
result = re.findall(r'dd-a-[a-z]{3}',s,re.I)
print(result)
result = re.findall(r'(dd)-a-([a-z]{3})',s,re.I)
print(result)
it = re.finditer(r'(dd)-a-([a-z]{3})',s,re.I)
for result in it:
print(result.group(),end=' < ')
groups = result.groups()
for i in groups:
print(i,end=' ')
print(' > ')

输出结果:

['12-a-abc', '54-a-xyz']
[('12', 'abc'), ('54', 'xyz')]
['12-a-abc', '54-a-xyz', '78-A-ytr']
[('12', 'abc'), ('54', 'xyz'), ('78', 'ytr')]
12-a-abc < 12 abc
>
54-a-xyz < 54 xyz
>
78-A-ytr < 78 ytr
>

不管是findall函数,还是finditer函数,都可以通过第3个参数指定re.I,将匹配方式设为大小写不敏感。如果模式字符串加上分组,那么findall函数就会返回元组形式的结果(列表的每一个元素是一个分组)。

最后

以上就是醉熏糖豆为你收集整理的Python进阶之路 高级编程 正则表达式-使用findall和finditer查找每一次出现的位置的全部内容,希望文章能够帮你解决Python进阶之路 高级编程 正则表达式-使用findall和finditer查找每一次出现的位置所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部