使用方法详解与实战应用

时间:2025-02-11 14:48:09

介绍:  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