Python学习-----模块3.0(正则表达式-->re模块)
创始人
2024-05-26 07:24:00
0

目录

前言:

导入模块

 1.re.match() 函数

(1)匹配单个字符

(2)匹配多个字符

(3) 匹配开头和结尾

 2.re.search() 函数

3.re.findall() 函数

4.re.finditer() 函数

5.re.split() 函数

6.re.sub() 函数

7.re.subn() 函数


前言:

        re模块(正则表达)是Python中的重要组成部分,这里涉及到字符串的匹配,转换,自定义格式化……等等,尤其是对于后面要学的Python爬虫是经常用到的。这个模块是Python自带的,不需要pip下载,导入使用就行了。

之前我们学过了r原始字符串标识符,比如:r'123\n' 输出结果就是123\n,是表示输出原始字符串,里面的转义符就当做普通的一个字符直接输出就行了,这个也是一种正则表达方式。 

print(r'hello\n123\t')
#输出结果:hello\n123\t

导入模块

import re

 1.re.match() 函数

语法格式:re.match(pat,string,flag=0)

用法:re.match('正则表达式’,'要匹配的字符串',flag= )

参数说明

pat:是表示参与匹配的正则表达式

string:是表示要匹配的字符串

flag:是标志符,用于控制正则表达式的匹配方式(设置条件之类的)

 函数说明:

这个函数是从开头第一个字符开始匹配的,如果匹配成功的话就返回一个匹配对象,如果失败就返回none。如果我们想要获取到返回的对象就用group(num)函数来获取,这个函数获取的结果就是匹配成功的字符串,如果num为0的话,其实等效于group(),如果num为1的话就返回正则表达式第一个括号匹配成功的字符串,如果num为2的话就返回正则表达式第二个括号匹配成功的字符串

(1)匹配单个字符

字符功能位置
.匹配任意一个字符(除了\n)
[ ]

匹配[ ]中列举的字符(可以是

一个范围)

\d匹配数字,0~9可以写在[ ]中
\D

匹配非数字,除了数字以外

都可以匹配成功

可以写在[ ]中
\s匹配空白符,空格 ,Tab可以写在[ ]中
\S匹配非空白符可以写在[ ]中
\w
匹配0-9,a-z,A-Z,中文等
等除了特殊符号以外的范围
内的字符
可以写在[ ]中
\W

匹配非单词子串,除了\w范围 

以内的都可以匹配

可以写在[ ]中

 示例 

import re
string='hello word!'
pat=re.match('.',string)
print(pat)
print(pat.group())
#输出结果:  
# h

 其中第一个输出的结果就是返回的对象,span=(0,1)是表示匹配范围为字符串的第0位(区间是左闭右开),匹配成功的字符串match='h'

如果用group()去获取对象字符串就直接输出 h

示例1: 

import re
#单个匹配示例#1.'.'号匹配
a='123hello你好'
a1=re.match('..',a)#正则表达式有两个..那么就匹配字符串a前两个字符
print(a1,a1.group())
#输出结果: 12#2.'.'号匹配
b='garrymod555'
b1=re.match('g..r',b)
print(b1,b1.group())
#输出结果: garr#3.直接匹配:被匹配的字符串首字符要与正则表达式相同,大小写一一对应
c='python欧尼酱'
c1=re.match('p',c)
print(c1,c1.group())
#输出结果: p#4.利用[],枚举匹配
d='Haolow'
d1=re.match('[hH]',d)  #这时候d 的开头大小写都可以匹配成功
print(d1,d1.group())
#输出结果: H#利用[],枚举匹配0~9范围的数字
num='51997asd'
num1=re.match('[0123456789]',num)
print(num1,num1.group())
#输出结果: 5#5.利用[],范围匹配
e='ikuncxk'
e1=re.match('[a-z]',e)  #[]内是表示a~z在字符范围
print(e1,e1.group())
#输出结果: i#6.利用[],匹配多个范围
f='567hhh'
f1=re.match('[2-68-9]',f)  #这个是表示匹配2~6和8~9 范围以内的数字(字母也是同样的道理)
print(f1,f1.group())
#输出结果: 5#7.利用\d,匹配数字(另外一个是\D,这里就不讲了,正则表达式匹配添加是跟\d完全相反的)
g='666985www'
g1=re.match('\d',g)   #
print(g1,g1.group())
#输出结果: 6#8.利用\s,匹配空白符(跟上面一样\S,是\s反过来的,用法一样,不讲)
h='  91呵呵'
h1=re.match('\s',h)
print(h1,h1.group())
#输出结果:#9.利用\w,匹配0-9,a-z,A-Z,中文等等除了特色符号以外的范围内的字符
i='天问1号'
i1=re.match('\w',i)
print(i1,i1.group())
#输出结果: 天问1号#10.利用\W,匹配特殊字符(\w范围以外的字符)
k='@qq.com'
k1=re.match('\W',k)
print(k1,k1.group())
#输出结果: @

 示例2:(匹配失败)

import re
kun='hellosad'
k=re.match('5',kun)
print(k)
#输出结果:None

(2)匹配多个字符

字符功能/说明位置
*

匹配前一个字符,

这个字符出现

0次到无限次(可有

可无)

可以用在

字符或者

()之后

+

匹配前一个字符,

这个字符必须出现

一次以上(否则报错)

上限为无限

可以用在

字符或者

()之后

匹配前一个字符,

这个字符出现0次

到1次

可以用在

字符或者

()之后

{m}

匹配前⼀个字符出现

m次

可以用在

字符或者

()之后

{m,n}

匹配前⼀个字符出现

从m到n次,若省略m,

则匹配0到n次,若省略n,

则匹配m到无限次;若省略

m,这匹配m,这匹配0到

n次

可以用在

字符或者

()之后

 

import re# *  匹配多个字符
p='1112223haowww.com'
#示例1
p1=re.match('[\d]*',p)
print(p1.group())
#输出结果:1112223
#示例2
p2=re.match('1*',p)
print(p2.group())
#输出结果:111
#示例3
p3=re.match('1t*',p)
print(p3.group())  #不会报错
#输出结果:1# + 匹配多个字符
q='aaa112python'
#示例1
q1=re.match('[a-z]+',q)
print(q1.group())
#输出结果:aaa
#示例2
q2=re.match('ai+',q)
#print(q2.group()) #报错
print(q2)
#输出结果:None# { }综合使用
#示例1:匹配由大小写字母以及数字组成的密码
ret=re.match('[a-zA-Z0-9]{6}','321uyg88') #如果{}里面的数字大于8就会报错,超过范围了
print(ret.group()) #输出结果:321uyg
#示例2:匹配8~12为由小写字母和数字组成的密码
res=re.match('[a-z0-9]{8,12}','123520ikun')
print(res.group())#输出结果123520ikun

(3) 匹配开头和结尾

字符功能
^匹配字符串的开头
$匹配字符串的结尾

示例:

import re
#实战示例:
#我要匹配3899ojk@qq.com的QQ邮箱
emails=['3899ojk@qq.com','3899ojk@qq.comxiaolan','9554xio@qq.com']
for email in emails:qq=re.match('[0-9a-zA-Z]{1,10}@qq.com$',email)if qq:print('匹配成功')else:print('匹配失败')

 2.re.search() 函数

格式:

re.search('正则表达式','字符串')

说明:这个函数是从整个字符串去进行匹配的,跟re.match()不同,re.match()是从开头去匹配,如果开头不一样就返回None,而re.search()是看字符串的全局,直到匹配到满足正则表达式才返回匹配对象,如果整个字符串都没有找到匹配对象才会返回None

示例:

import re
r=re.search('wao','123waohhhq')
print(r.group())
#输出结果:waos=re.search('q[0-9]?j','heheqq5jbye')
print(s.group())
#输出结果:q5j

3.re.findall() 函数

格式:

re.findall('正则表达式','字符串')

说明:整个函数同样也是从整个字符串来匹配,但是这个函数是吧整个字符串所以满足正则表达式的子串以列表的形式返回(前面的函数都是返回一个对象,需要用group()函数来获取对象的子串),而这个函数是直接返回一个含有全部子串的列表

示例:

import re
ret=re.findall('\d+','123www555abc789')
print(ret)
#输出结果:['123', '555', '789']

4.re.finditer() 函数

格式:

re.finditer('正则表达式','字符串')

说明:这个函数跟re.findall() 差不多,只是前者是返回一个迭代器(需要用循环去依次获取里面的对象),而后者是返回一个列表

示例:

import re
ret=re.finditer('\d+','Python999,C++555,Java666')
print(ret) #输出的是迭代器地址
for i in ret:print(i.group(),end=' ')
#输出结果:
#         999 555 666 

5.re.split() 函数

split()整个函数在之前的字符串操作初步讲过,是一个切割函数Python学习------起步7(字符串的连接、删除、修改、查询与统计、类型判断及字符串字母大小写转换)_Python欧尼酱的博客-CSDN博客

格式:

re.split(pat,string,times)

参数说明:

pat:是正则表达式

string:是字符串

times:是分割次数

功能作用:在整个字符串中,根据匹配成功的子串作为切割点,对字符串进行切割,然后返回一个列表类型

示例: 

import re
cut=re.split('\d','hello 1 my 2 friend')
print(cut)
#输出结果:['hello ', ' my ', ' friend']cut_1=re.split(r':| ','Jack say:"I can do this all day"') #r表示后面为原字符串
print(cut_1)
#输出结果:['Jack', 'say', '"I', 'can', 'do', 'this', 'all', 'day"']

6.re.sub() 函数

格式:

re.sub(pat,repalc,string,count,flag)

参数:

pat:是表示正则表达式

replac:是要替换的字符串(必写)

string:是匹配的字符串

count:是替换的最大次数,如果不写就默认全部替换

flag:可选参数,标志符,用于控制正则表达式的匹配条件

功能说明:sub是substitute的缩写,意思是取代,这个函数可以将匹配到的子串进行取代替换,然后返回一个字符串类型

import re
kun=re.sub('\d[A-Z]','鹜','hello,4Baww5Kc8P')
print(kun)
#输出结果:hello,鹜aww鹜c鹜KUN=re.sub('\d[A-Z]','鹜','hello,4Baww5Kc8P',count=2)  #这里设置了count的值为2
print(KUN)
#输出结果:hello,鹜aww鹜c8P

7.re.subn() 函数

说明:这个函数的用法跟re.sub() 的用法是一样的,只是返回值不一样,这个函数的返回值是一个元组,格式:('返回的字符串','次数')

import re
def rep(temp):temp='GBT'return temp
su=re.subn('\d+',rep,'hao,w1q2d3') #不设置count,此时就是全部的替换次数
print(su)
#输出结果:('hao,wGBTqGBTdGBT', 3)

感谢各位的支持,我们下一期再见~~~

日常分享一张壁纸

相关内容

热门资讯

工业遗存改造催生京津冀文旅新地... 转自:北京日报客户端炼钢高炉变身科幻体验馆,运料通廊改造为极限运动场,工业厂房里开出网红餐厅……北京...
全国游泳冠军赛潘展乐男子400... 中国青年报客户端湖州5月17日电(中青报·中青网记者 慈鑫)今晚在深圳举行的2025全国游泳冠军赛男...
突发!广西山洪,3人遇难1人失... 转自:央视财经记者从广西百色市隆林各族自治县应急管理局获悉,5月16日至17日,受高空槽和低层切变线...
国羽包揽泰国公开赛混双冠亚军 ... 20岁的高家炫和22岁的吴梦莹是今年年初通过调赛成功进入国羽一队的年轻混双组合。今年2月,两人首次代...
“先增聘再离任”又添一例,景顺... 转自:扬子晚报网澎湃新闻记者 丁欣晴景顺长城基金百亿基金经理鲍无可离职传言终成真。5月17日,景顺长...
湾区法律专家共议仲裁制度创新 ... 本报记者 赵毅 广州报道在全球经济深度调整与国内产业转型升级的双重驱动下,中国企业正加速“走出去”。...
科普帖!运动和不运动的人差别有... 【科普帖!#运动和不运动的人差别有多大#?】坚持跑马拉松后更“显老”了?#运动加速衰老还是延缓衰老#...
锁价≠最低价!南航9.9元起的... “提前10天至3个月,支付9.9元起的费用,用户就可将意向行程机票价格锁住3天或7天”。继“锁座”之...
体验堪称“小15” Xiaom...   轻薄成为目前手机行业的主旋律,特别是针对年轻用户打造的时尚手机,为此在全新推出的Xiaomi C...
下周开始,涉及长春这些小区! 长春燃气股份有限公司于2025年5月19日至5月25日对以下小区居民用户的户内燃气设施进行入户安全检...
青少年舞者竞逐梦想,用足尖点亮... 转自:上观新闻时光荏苒,卢湾体育馆的穹顶下,今日再度被少年的足尖叩响。5月17日,上海市民体育舞蹈节...
宁德时代:山东时代电池生产基地... 人民财讯5月17日电,近日,山东时代储能及动力电池生产基地在济宁市兖州区正式投产,这是宁德时代在北方...
蔡奇在河北唐山市调研时强调 坚... 转自:北京日报客户端新华社石家庄5月17日电中共中央政治局常委、中央书记处书记蔡奇16日至17日在河...
滴水湖旅游度假区主题音乐会唱响... 今天(5月17日),滴水湖畔,“年轻的城”为迎接第14个“中国旅游日”及520“临港遇见爱”主题月,...
“俄罗斯礼品季”亮相哈尔滨 数... 中新社哈尔滨5月17日电 (记者 王妮娜)“俄罗斯制造”节展17日在哈尔滨举行开幕式,来自俄罗斯35...
绝味鸭脖被指缺斤少两? 转自:荔枝新闻 【#绝味鸭脖被指缺斤少两#?】#女子称绝...
“点亮网络文明之光”2025年... 5月16日,“点亮网络文明之光”2025年网上主题宣传活动在滨海城市大连正式启动。本次活动联动大连、...
「教」量|高途一季度突然盈利:... 21世纪经济报道记者王峰北京报道  近日,高途教育科技集团(NYSE:GOTU)发布2025财年第一...
航行警告 黄海水域有海上火箭发... 转自:财联社【航行警告 黄海水域有海上火箭发射】财联社5月17日电,据中国海事局网站消息,日照海事局...
广西隆林突发山洪致3人遇难,1...   记者从广西百色市隆林各族自治县应急管理局获悉,5月16日至17日,受高空槽和低层切变线共同影响,...