介绍: findall()方法用于在整个字符串中搜索所有匹配的值,如果匹配成功,则以列表形式返回,否则返回空列表
语法: (pattern , string , [flags])
pattern: 模式字符串 string:要匹配的字符串 flags:可选参数,比如 不区分大小写.使(.)能够匹配所有字符,包括换行符
话不多说,直接上代码
import re
#1.匹配到多个字符串
res = ("[0-9]{2}","my name is xiaoming01,and my age is 20!")
print(res)
#输出结果:['01', '20']
#2.未匹配到字符串
res = ("[0-9]{3}]","my name is xiaoming01,and my age is 20!")
print(res)
#输出结果:[]
#3.使用修正字符
res = (".+","abcdefg\nhijkmn")
print(res)
#输出结果: ['abcdefg', 'hijkmn']
res = (".+","abcdefg\nhijkmn",)
print(res)
#输出结果:['abcdefg\nhijkmn']
#4.贪婪模式和懒惰模式
#4.1 贪婪模式(默认)
res = ("<li>.*</li>","<li>打篮球</li><li>听音乐</li><li>看书</li>")
print(res)
#输出结果:['<li>打篮球</li><li>听音乐</li><li>看书</li>']
#4.2 懒惰模式(常用)
res = ("<li>.*?</li>","<li>打篮球</li><li>听音乐</li><li>看书</li>")
print(res)
#输出结果:['<li>打篮球</li>', '<li>听音乐</li>', '<li>看书</li>']
#4.3 (.*?)只输出()内的内容,()外的将被排除
res = ("<li>(.*?)</li>","<li>打篮球</li><li>听音乐</li><li>看书</li>")
print(res)
#输出结果:['打篮球', '听音乐', '看书']
来个实战练练手:
1.获取一个字典列表类型的字符串中所有的姓名
#定义要匹配的字符串
str = '[{"name":"刘备","age":25,"sex":"M"}, \
{"name":"关羽","age":21,"sex":"F"}, \
{"name":"张飞","age":20,"sex":"M"}] '
res = ("\"name\":\"(.*?)\"",str)
print(res)
#输出结果:['刘备', '关羽', '张飞']
2.获取字符串中所有的IP地址,如何处理匹配字符串中包含分组的问题
import re
pat = r'([1-9]{1,3}(\.[0-9]{1,3}){3})'
str = '127.0.0.1 192.168.88.22'
results = (pat,str)
for res in results:
print(res[0])
#输出结果:127.0.0.1
# 192.168.88.22