版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
正则表达式的函数使用正则表达式的函数CHAPTER13CONTENTS目
录01正则表达式的使用方法02正则对象和匹配规则03正则对象的常用成员函数04正则表达式里的match对象正则表达式的函数正则表达式的使用方法0102将模式字符串编译为正则表达式对象使用re模块里的相关方法直接操作正则表达式的函数>>>importre>>>pattern=pile(r'1[34578]\d{9}')>>>string='收件人是林书凡,联系电话为>>>result=pattern.sub("1**********",string)>>>print(result)收件人是林书凡,联系电话为:1**********【例】调用正则对象的成员函数对原字符串进行匹配正则表达式的函数>>>importre>>>pattern=r'1[34578]\d{9}'>>>string='收件人是林书凡,联系电话为>>>result=re.sub(pattern,'1**********',string)>>>print(result)收件人是林书凡,联系电话为:1**********【例】使用re模块里方法操作模式字符串和原字符串正则表达式的函数大量重复使用某些指定场合使用使用编译为正则对象的方法直接调用re里的方法正则表达式的函数正则对象和匹配规则010302使用re的compile方法将模式字符串编译为正则对象第二个可选参数flags是枚举对象修改和配置flags参数就可以改变这些规则原型“pile(pattern,flags=0)”默认规则下,正则表达式是区分大小写正则表达式的函数常用的规则按ASCII码匹配,使用re.A或re.ASCII按Unicode匹配忽略大小写多行匹配默认匹配规则,特殊字符“.”只能匹配除换行符外的其它字符0102030405正则表达式的函数按ASCII码匹配,使用re.A或者re.ASCII记法匹配内容\d匹配一个数字,可以是半角的,也可以是全角的。如果在ASCII码中,就等同于[0-9]\D除了数字其它都可以匹配,相当于[^0-9]\w匹配一个单词字符,在ASCII码中相当于[0-9A-Za-z_]。在Unicode中,则包括所有构成单词的字符,比如希腊字符、中文字符等\W匹配所有\w不能匹配的字符,在ASCII码中相当于[^0-9A-Za-z_]\s所有的空白符,在ASCII码中就是[\t\n\r\f\v]。在Unicode中,所有显示为空白的字符,比如全角的空格都可以匹配\S匹配所有\s不能匹配的字符,在ASCII码中相当于[^\t\n\r\f\v]只匹配ASCII码正则表达式的函数>>>print(re.search("1(3[0-9]|4[01456879]|5[0-3,5-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}",,re.A))None>>>re.search("1(3[0-9]|4[01456879]|5[0-3,5-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}",,re.A)<re.Matchobject;span=(0,11),match=>【例】
按ASCII码匹配可处理半角或全角问题。使用re.A后,就可以看到会有如下所示的结果正则表达式的函数常用的规则按ASCII码匹配,使用re.A或re.ASCII按Unicode匹配忽略大小写多行匹配默认匹配规则,特殊字符“.”只能匹配除换行符外的其它字符0102030405正则表达式的函数按Unicode匹配在新版Python的正则表达式中,本身就是按Unicode字符匹配的,所以不需要加任何标记符。由于之前版本并不是这样的,所以保留了re.U使得早期版本的Python代码在新版编译器中不会失效,但在新版代码中re.U基本没有任何意义正则表达式的函数常用的规则按ASCII码匹配,使用re.A或re.ASCII按Unicode匹配忽略大小写多行匹配默认匹配规则,特殊字符“.”只能匹配除换行符外的其它字符0102030405正则表达式的函数忽略大小写默认的匹配区分大小写忽略大小写使用
re.Ire.IGNORECASE[a-z]
可匹配
[A-Z]正则表达式的函数常用的规则按ASCII码匹配,使用re.A或re.ASCII按Unicode匹配忽略大小写多行匹配默认匹配规则,特殊字符“.”只能匹配除换行符外的其它字符0102030405正则表达式的函数多行匹配正常情况下,无论有多少个换行符,正则表达式都将其视为一行换行符只是视为一个普通的字符匹配为字符串索引位置0行首标记符“^”匹配字符串索引位置-1行尾标记符“$”正则表达式的函数使用re.M或者re.MULTILINE的情况下行首标记符
除了匹配字符串的开头外,还可以匹配每一个换行符的后一个字符,也就是显示出来的字符串的每一行的开头行尾标记符
除了匹配字符串的结尾以外,还可以匹配换行符的前一个字符,也就是显示出来的字符串的每一行的结尾正则表达式的基本规则>>>mobile=pile("^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$",re.A)>>>print(mobile.search('''133555522221334444777713322224444'''))None>>>mobile=pile("^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$",re.M)>>>mobile.search('''133555522221334444777713322224444''')<re.Matchobject;span=(0,11),match=>【例】使用
re.M
或者
re.MULTILINE的匹配方式具体实例如下正则表达式的函数忽略大小写默认的匹配特殊字符“.”只匹配除换行符外的其它字符匹配包括换行符在内的字符re.Sre.DOTALLre.DEBUGre.Xre.L正则表达式的函数正则对象的常用成员函数searchfullmatchsplitmatchfinditersub正则表达式的函数如仅需搜索原字符串中是否出现符合条件的文本,可使用search函数假设正则对象为pattern,则调用search函数的语法如下search函数
pattern.search(string[,pos[,endpos]])正则表达式的函数pattern.search(string[,pos[,endpos]])原字符串字符串的开始位置字符串的结束位置正则表达式的函数pos不指定搜索原字符串endpos指定搜索从pos至endpos-1的字符endpos<pos字符串切片结果为空不会有任何结果返回
pattern.search(string[,pos[,endpos]])假设正则对象为pattern,则调用search函数的语法如下正则表达式的函数pattern.search(string[,pos[,endpos]])两个参数作用是对原字符串进行切片,所以可省略如果rx是一个编译后的正则对象rx.search(string,0,50)等价于rx.search(string[0:50])正则表达式的函数search函数的返回值找到对应匹配返回对应结果找不到对应匹配返回
None正则表达式的函数>>>pattern=pile("d")>>>pattern.search("dog")<re.Matchobject;span=(0,1),match='d'>>>>print(pattern.search("dog",1))None具体实例正则表达式的函数关于if语句里对于真值的判定,返回的对象没有特别规定真假有对象为真没对象为假使用if语句判定时,把search函数放在if的条件部分即可,不需写额外判断正则表达式的函数与search函数功能相似但是在使用过程中非常容易混淆,其参数与search完全相同,但是该函数只能从字符串的“开始位置”搜索match函数正则表达式的函数【例】
match函数的操作实例>>>pattern=pile("og")>>>pattern.search("dog")<re.Matchobject;span=(1,3),match='og'>>>>print(pattern.match("dog"))Nonematch函数不可以匹配字符串任何位置出现的、模式字符串所描述的内容正则表达式的函数单行模式match函数相当于search函数的模式字符串中,加入了行首标识符“^”多行模式当于在search函数下加入了含断言的行首标识符“(?<!\n)^”正则表达式的函数类似match函数,相当于在单行模式下search函数同时加入了行首标记符“^”和行尾标记符“$”,只有整个字符串都符合条件才会得到匹配fullmatch函数正则表达式的函数>>>pattern=pile(r"\w+@\w+(?:\.\w+)+")>>>pattern.search("我的电子邮箱是email@")<re.Matchobject;span=(8,24),match='email@'>>>>print(pattern.fullmatch("我的电子邮箱是email@"))>>>None>>>pattern.fullmatch("email@")<re.Matchobject;span=(0,16),match='email@'>【例】
使用fullmatch函数的具体实例正则表达式的函数在使用search、match、fullmatch时,一次都只能返回一个匹配。那么如果需要一次返回多个匹配,就需要使用findall和finditefindall和finditer函数正则表达式的函数findall和finditer函数搜索模式与search完全相同findall返回的是一个列表finditer返回一个迭代器正则表达式的函数【例】
findall和finditer函数的操作实例>>>pattern=pile(".")>>>pattern.findall("dog")['d','o','g']>>>pattern.finditer("dog")<callable_iteratorobjectat0x00000236D06B9F40>>>>pattern=pile("(a)(p)")>>>pattern.findall("apple")[('a','p')]正则表达式的函数split函数—五个函数是关于正则表达式在使用匹配功能时需要用到的函数searchmatchfullmatchfindallfinditer正则表达式的函数在某些应用场景下,对于一段文本内容,如果需要将文本按所有标点符号切割,使用字符串的split方法较麻烦,而使用正则表达式的split函数就很简单split函数正则表达式的函数split函数有两个参数原字符串
默认为0,即无限次切割的最大次数
第一个参数正则表达式的函数>>>pattern=pile(r"\W+")>>>pattern.split("使用正则表达式的split函数很简单,如图1-1所示。")['使用正则表达式的split函数很简单','如图1','1所示','']split
函数正则表达式的函数>>>pattern=pile(r"(\W+)")>>>pattern.split("使用正则表达式的split函数很简单,如图1-1所示。")['使用正则表达式的split函数很简单',',','如图1','-','1所示','。','']【例】使用切割标点符号实例切割时“\W”匹配的是非文本字符,将“-”也视为了标点符号正则表达式的函数在使用split函数中,分割匹配的正则表达式加括号和不加括号是不一样的。其区别是,如果分割字符串加了括号,括号内的内容也将会出现在切割后的字符串里正则表达式的函数>>>pattern=pile(r"(?:\W+)")>>>pattern.split("使用正则表达式的split函数很简单,如图1-1所示。")['使用正则表达式的split函数很简单','如图1','1所示','']【例】在使用split函数中,必须要用分组又不希望切割内容出现在结果中,可使用非捕获组将这些组忽略掉正则表达式的函数sub函数用于替换字符串中的匹配项假设正则对象为pattern,则调用search函数的语法如下sub函数
pattern.sub(repl,string,count=0)正则表达式的函数attern.sub(repl,string,count=0)替换的字符串被替换的原始字符串可选参数,默认0sub
函数正则表达式的函数>>>importre>>>phone="0592-123-4567#这是一个厦门市的电话号码">>>#删除字符串中的Python注释>>>pattern=pile(r'#.*$')>>>num=pattern.sub("",phone)>>>print("电话号码是:",num)电话号码是:0592-123-4567>>>#删除非数字字符>>>pattern=pile(r'\D')>>>num=pattern.sub("",phone)>>>print("电话号码是:",num)电话号码是:05921234567【例】
sub函数的操作实例正则表达式的函数正则表达式里的match对象在正则表达式里,返回名为“match”的结果。search和match函数,都返回一个“match”对象。match对象本身可视为True值,可直接用在if函数的判断语句里表达式返回结果正则表达式的函数一个最常用的函数可以直接返回匹配里对应组的内容参数是组的编号或者具名组的名称group函数正则表达式的函数返回的是匹配全文没有参数
返回的是对应组只有一个参数
返回的是对应组的元组有多个参数
可以用组名代替组的序号拥有具名组
group函数正则表达式的函数【例】正则表达式里的match对象具体实例>>>m=re.match(r"(?P<first_name>\w+)(?P<last_name>\w+)","MalcolmReynolds")>>>m.group()'MalcolmReynolds'>>>m.group(0)'MalcolmReynolds'>>>m.group(1)'Malcolm'>>>m.group(2)'Reynolds'>>>m.group("
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山西老区职业技术学院《卫生法学基础教程》2025-2026学年期末试卷
- 上海立达学院《投资组合管理》2025-2026学年期末试卷
- 上海商学院《交通运输经济法规》2025-2026学年期末试卷
- 忻州师范学院《大学生职业与发展》2025-2026学年期末试卷
- 上海科创职业技术学院《钢筋混凝土结构平面识读与钢筋算量》2025-2026学年期末试卷
- 上海邦德职业技术学院《经济学基础》2025-2026学年期末试卷
- 沈阳农业大学《服务贸易》2025-2026学年期末试卷
- 徐州工程学院《劳动与社会保障法》2025-2026学年期末试卷
- 沈阳药科大学《口腔局部解剖》2025-2026学年期末试卷
- 沈阳医学院《普通教育学》2025-2026学年期末试卷
- 2026广东广州市黄埔区大沙街道招聘编外聘用人员4人备考题库及参考答案详解
- 企业车间绩效考核制度
- 乡镇禁毒举报奖惩制度
- 2026年云南省公务员考试《行政职业能力测验》(省直卷)真题解析
- 医疗服务价格项目立项指南解读辅导2026
- 2026年江西赣州市高三一模高考数学试卷试题(含答案详解)
- 2026创新药licenseout交易模式与价值评估体系
- 抗衰品招商课件
- 全过程造价咨询服务的质量、进度、保密等保证措施
- 2026年高考数学复习讲练测专题04 导数题型全归纳(题型专练)(原卷版)
- 学生介绍班级
评论
0/150
提交评论