本文目录
  1. 1. 正则表达式的作用
  2. 2.正则表达式的使用
  3. 2.1 match的使用–检查第一个字符
  4. 2.2 search的使用–扫描整个字符串
  5. 2.3findall的使用–扫描整个字符串,返回列表
  6. 3.正则表达式的书写
  7. 3.1单个字符串的匹配
  8. 3.2多个字符串的匹配
  9. 3.3开头和结尾的使用
  10. 3.4分组和或
  11. 3.5贪婪模式和非贪恋模式

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)