PYTHON NOTES · 12
使用 match、search、findall 和常用规则完成字符串匹配。
- 正则表达式
- re
本文目录
Python 正则表达式
使用 match、search、findall 和常用规则完成字符串匹配。
1. 正则表达式的作用
匹配或者查找符合某些规则的字符串
2.正则表达式的使用
2.1 match的使用–检查第一个字符
# 1.正则表达式就是检查数据格式的
#调包
import re #regular expression
#2.创建正则表达式对象,并指定匹配模式
# re.match("正则表达式","被检测的字符串")
result=re.match("[0-9]","01234566")
#如果匹配不上,result的返回值就是 None
#如果匹配的上,result的返回值就是找到的第一个数
if result:
print("匹配成功",result.group())
else:
print("匹配失败")
res1=re.match("2","01234566")
print(res1)
#能找到值返回res.group()
#找不到值返回res
2.2 search的使用–扫描整个字符串
#1.search的使用
#在整个字段里面找 找到就返回
#只返回找到的第一个
import re
result=re.search("12","01234566")
print(result.group())
res=re.search("1","01234516")
print(res.group())
res1=re.search("9","01234516")
print(res1)
#能找到值返回res.group()
#找不到值返回res
2.3findall的使用–扫描整个字符串,返回列表
#2.findall的使用
#在整个字段里面找,找到的都返回
#返回的是一个列表,找不到返回一个空列表
res3=re.findall("1","01234516")
print(res3)
res4=re.findall("9","01234516")
print(res4)
3.正则表达式的书写
3.1单个字符串的匹配
import re
# 1 .表示任意的字符(一个.表示一个字符)
res1=re.match(r"...","abcde")
print(res1.group()) #---abc
res2=re.match(r"........","abcde")
print(res2) #---None(因为长度不够,所以没找到)
#2 []表示集合里面的都可以查找 [^] 除了集合里面的
res3=re.match(r"[abc]","abcde")
print(res3.group())
res4=re.match(r"[0-9a-zA-Z]","Aabcde")
print(res4)
#3 \d表示数字[0-9]
res5=re.match(r"\d","1234")
print(res5.group())
res6=re.match(r"\d","abcde")
print(res6)
3.2多个字符串的匹配
#验证11位手机号
#第一位是1
#第二位没有0,1,2
import re
num=re.match(r"[1][^012]\d{9}","13572138774")
print(num)
# *字符出现0次或无限次
#{m}出现m次
#+ 至少出现一次
#?出现一次或0次
#{m,n}出现m-n次
#{m,}出现>m次
3.3开头和结尾的使用
#$ 结尾
#^ 开头
#1.手机号
import re
num=re.match(r"^[1][^012]\d{9}$","13572138774")
print(num)
#6.六位纯数字验证码
res=re.match(r"^\d{6}$","123456")
print(res)
3.4分组和或
#1.或 |
import re
#判断邮箱
#或通常使用括号括起来
res1=re.match(r"[a-z0-9]{4,12}@(qq|163|126)\.com","10525@qq.com")
print(res1)
#分组() \分组编号 配套使用
# 判断<h1> </h1>
res2=re.match(r"<([a-z0-9]{2})>(.*)</\1>","<h1>hello world</h1>")
res3=re.match(r"<([a-z0-9]{2})>(.*)</\1>","<h1>hello world</h2>")
print(res2)
print(res3)
3.5贪婪模式和非贪恋模式
#findall查找组的时候,直接输出组
#贪恋模式.*
#非贪婪模式 .*?
import re
content_test = '<img src="http://www.baidu.com/a.png" width="100%">'
#非贪恋模式
res=re.findall (r'<img src="(.*?)".*',content_test)
print(res)
#贪恋模式
res1=re.findall (r'<img src=".*".*>',content_test)
print(res1)
content = '<img class-"lazy." src="//p2. img . cctvpic.com/photoAlbum/page/penformance/img/2026/6/20/1781930258479_596.Jpg" data-src="//p2. img.cctvpic. com/photoAlbum/page/penformance/img/2026/6/20/1781930258479_596.jpg" width="100%">'
#使用findall查找组,输出的就是组
#前面贪,后面不贪
res2=re.findall(r'<img.*src="(.*?)".*>',content)
print(res2)
#前面不贪后面贪
res3=re.findall(r'<img.*?src="(.*)">',content)
print(res3)