1.findall
- re模块中的findall函数用于在字符串中找到所有与正则表达式匹配的子串。
re.findall函数的语法格式为:
re.findall(pattern, string, flags=0)
各参数含义与re.match和re.search函数完全相同。
如果匹配成功,则将匹配的数据以列表的形式返回;
如果匹配失败,则返回空列表。
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函数完全相同。
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)
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对象。
当匹配失败时,返回的迭代器中不包含任何元素。