(6-11)re模块使用-findall和finditer

文章目录

1.findall

  • re模块中的findall函数用于在字符串中找到所有与正则表达式匹配的子串。
    re.findall函数的语法格式为:
re.findall(pattern, string, flags=0)

各参数含义与re.match和re.search函数完全相同。
如果匹配成功,则将匹配的数据以列表的形式返回;
如果匹配失败,则返回空列表。
  • eg:
import re
str='''sno:#1810101#,name:#李晓明#,age:#19#,major:#计算机#
sno:#1810102#,name:#马红#,age:#20#,major:#数学#'''
rlt=re.findall(r'name:#([\s\S]*?)#[\s\S]*?major:#([\s\S]*?)#', str, re.I)
print(rlt)

结果:
[('李晓明', '计算机'), ('马红', '数学')]
'李晓明', '计算机'代表:对应分组的结果


与re.match和re.search函数不同,
re.findall函数可以一次完成字符串中所有满足正则表达式规则的子串的匹配
而re.match和re.search☞返回一个结果

2.finditer

  • re模块中的finditer函数与re.findall函数功能完全相同,唯一区别在于re.findall函数返回列表形式的结果,而re.finditer返回迭代器形式(每次可以获取迭代对象)的结果。
    re.finditer的语法格式为:
re.finditer(pattern, string, flags=0)

各参数含义与re.findall函数完全相同。
  • eg:
import re
str='''sno:#1810101#,name:#李晓明#,age:#19#,major:#计算机#
sno:#1810102#,name:#马红#,age:#20#,major:#数学#'''
rlt1=re.finditer(r'name:#([\s\S]*?)#[\s\S]*?major:#([\s\S]*?)#',str, re.I)
rlt2=re.finditer(r'department:#([\s\S]*?)#', str, re.I)

## 因为rlt1是可迭代的,所以输出match对象
print('rlt1:')
for r in rlt1:
	print(r)
print('rlt2:')
	for r in rlt2:
print(r)

结果:
rlt1:
<re.Match object; span=(14, 45), match='name:#李晓明#,age:#19#,major:#计算机#'>
<re.Match object; span=(60, 89), match='name:#马红#,age:#20#,major:#数学#'>
rlt2:

re.finditer函数返回的迭代器中每一个元素都是一个Match对象。
当匹配失败时,返回的迭代器中不包含任何元素。
发布了556 篇原创文章 · 获赞 140 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/u011436427/article/details/104241789