版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
模式字符串的常用语法规则正则表达式基本规则CHAPTER13CONTENTS目
录01正则表达式中的字符串类型02模式字符串中的普通字符03模式字符串中的转义字符04模式字符串的其它特殊字符正则表达式的基本规则正则表达式中的字符串类型模式字符串原字符串正则表达式的基本规则Unicode字符串(str)Python中字符串的表现形式字节串(bytes)正则表达式的基本规则使用正则表达式的过程中,不能使用Unicode字符串匹配一个字节串模式字符串
原字符串
表现形式正则表达式的基本规则
使用正则表达式进行替换操作时,类型保持一致替换的字符串模式字符串原字符串正则表达式的基本规则模式字符串中的普通字符普通字符串特殊字符串正则表达式的基本规则除上述其它字符都是普通字符正则表达式的基本规则例如:模式字符串“Python”在没有任何特殊设置的情况下,就只能匹配大小写与之一致的字符串正则表达式的基本规则>>>print(re.search("Python","这是一本介绍Python的书"))<re.Matchobject;span=(6,12),match='Python'>【例】
如只使用普通字符作为模式字符串进行匹配,目的是为了验证原字符串是否包含某些内容作用同
find
函数正则表达式的基本规则在使用正则表达式匹配时70%是否包含模式字符串模式字符串所在的位置信息返回的匹配结果正则表达式的基本规则模式字符串出现一次find
函数和find函数无区别正则表达式的基本规则确定模式字符字串出现的起止位置>>>print("这是一本介绍Python的书".find("Python"))6通过返回的索引值find
函数正则表达式的基本规则模式字符串出现多次search
函数只返回第一个匹配的位置和内容可是在实际使用过程中,有些场景(比如解析一个HTML),必须要得到所有的匹配正则表达式的基本规则
可以返回一个迭代器,通过循环语句就可以取出所有的匹配finditer函数正则表达式的基本规则>>>forminre.finditer("Python","这是一本用Python写的、介绍Python的书"):
print(m)<re.Matchobject;span=(5,11),match='Python'><re.Matchobject;span=(16,22),match='Python'>【例】
使用finditer函数,它可以返回一个迭代器,通过循环语句就可以取出所有的匹配正则表达式的基本规则模式字符串中的转义字符转义字符“\”可将特殊字符的含义消除和Python字符串中的转义字符含义类似
转义字符“\”正则表达式的基本规则【例】在正则表达式中,如果需要匹配一个字符串是否是一个存在于C盘的文件>>>re.search("C:\\\\.*",r"C:\msdia80.dll")<re.Matchobject;span=(0,14),match='C:\\msdia80.dll'>正则表达式的基本规则路径分隔符“\”在正则表达式中是一个特殊字符01写的时候要使用转义字符消去其特殊含义(写成“\\”)02反斜杠“\”在Python的字符串里也是特殊字符03“\\”经过Python字符串解释时,就变成了一个反斜杠04为了表示两个反斜杠“\\”,就要写成四个反斜杠“\\\\”05正则表达式的基本规则【例】
如需要匹配“\]”这样的字符,应当写成“\\\]”实例如下>>>re.search(r"\\\]",r"在正则表达式中,|\][都是特殊字符")<re.Matchobject;span=(9,11),match='\\]'>>>>re.search("\\\\\\]",r"在正则表达式中,|\][都是特殊字符")>>><re.Matchobject;span=(9,11),match='\\]'>正则表达式的基本规则模式字符串的其它特殊字符匹配字符串模式字符串中包含的字符匹配一些不确定的字符匹配手机号码正则表达式的基本规则模式字符串的其它特殊字符匹配字符串模式字符串中包含的字符匹配一些不确定的字符匹配手机号码通用字符正则表达式的基本规则模式字符串的其它特殊字符“通用字符”是指可表示一系列字符的字符。在正则表达式的默认配置中,模式字符串使用特殊字符“.”来代表除了换行符以外的一个任何字符正则表达式的基本规则>>>re.search("133........","您好,您拨打的电话已经更换为:133****2457。现在这个号码已经不再使用了。")<re.Matchobject;span=(15,26),match='133****2457'>【例】
模式字符串使用特殊字符“.”来代表除了换行符以外的一个任何字符,实例如下通用字符
“[
]”正则表达式的基本规则使用方括号包裹起来的内容应当视为一个字符,即意味着出现在这个位置的字符须是方括号中出现字符中的其中一个正则表达式的基本规则PythonpythonPpython[Pp]ython匹配结果可以绝对不可能是正则表达式的基本规则【例】使用方括号包裹起来的内容应当视为一个字符的具体实例>>>forminre.finditer("[Pp]ython","这是一本用Python写的介绍Python的书,不过你不可以把pyThon写成“Ppython”。"):print(m)<re.Matchobject;span=(5,11),match='Python'><re.Matchobject;span=(15,21),match='Python'><re.Matchobject;span=(41,47),match='python'>正则表达式的基本规则一个数字只有0-9这十种情况,所以可以直接写成“[0123456789]”这样的形式。不过,这种写法显然太麻烦了,实际上可以使用“[0-9]”来表示。同理,“[4-6]”表示这个位置应当出现数字4、5或者6如何书写模式字符串才能匹配一个数字呢
?正则表达式的基本规则>>>re.search("[4-6]","您说的这个号码是什么?我没有听清。当中的4位是什么?")<re.Matchobject;span=(20,21),match='4'>【例】
如何书写模式字符串才能匹配一个数字,实例如下“[a-z]”“[A-Z]”所有小写字母所有大写字母“[a-gx-zR-U]”“a-g”、“x-z”和“R-U”三段组合正则表达式的基本规则使用正常语言表达的a、b、c、d、e、f、g、x、y、z、R、S、T、U中的任何一个字母>>>forminre.finditer("[a-gx-zR-U]","这是一本用Python写的介绍Python的书,不过你不可以把pyThon写成“Ppython”。"): print(m)<re.Matchobject;span=(6,7),match='y'><re.Matchobject;span=(16,17),match='y'><re.Matchobject;span=(32,33),match='y'><re.Matchobject;span=(33,34),match='T'><re.Matchobject;span=(42,43),match='y'>正则表达式的基本规则>>>re.search("133........","您好,您拨打的电话已经更换为:133****2457。现在这个号码已经不再使用了。")<re.Matchobject;span=(15,26),match='133****2457'>【例】
模式字符串使用特殊字符“.”来代表除了换行符以外的一个任何字符,实例如下需要使用
8
个数字“133[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]”正则表达式的基本规则>>>re.search(r"\*{4}",r"不好意思先生,我说的是133****2457中间四位数是**5*啊")<re.Matchobject;span=(14,18),match='****'>【例】
在正则表达式中,可以使用花括号“{}”来表示一个字符出现了多少次,具体实例如下花括号只能匹配出现在它前面的1个字符正则表达式的基本规则>>>re.search("[cC][oO]{4,6}[lL]","这真的是太cool了。VERYCOOOOOL!VERYVERYCOOOOOOOOOOL!!!")<re.Matchobject;span=(16,23),match='COOOOOL'>【例】
字符出现次数是不固定的,如出现4次到6次都满足要求,那么可以在花括号中给出这些匹配次数“ba{4,6}”“ba{,6}”匹配“baaaaaa”a
应出现0至6次“ba{4,}”a应出现4次以上,直到无限次正则表达式的基本规则>>>re.search("\*{2,}",r"您那里信号是不是有问题啊,我这听到的都是*。一堆的*******")<re.Matchobject;span=(25,32),match='*******'>【例】
如果逗号前后数字都不写,就是匹配任意次。具体实例如下第一个星号连续七个星号只出现一次不能匹配全部匹配成功“{2,}”2
次或
2
次以上“{2}”只出现
2
次正则表达式的基本规则重复任意次特殊字符“*”等价于“{,}”1次或一次以上特殊字符“+”等价于“{1,}”0次或1次特殊字符“?”等价于“{0,1}”正则表达式的基本规则>>>forminre.finditer("colou?r","Thiscolourisverygood.Ilikethiscolor."): print(m)<re.Matchobject;span=(5,11),match='colour'><re.Matchobject;span=(38,43),match='color'>【例】在书写模式字符串时,有一些重复次数,具体实例如下“*”,“+”
和
“?”
都是用来简化书写,在使用时它们也只能修饰之前的一个字符正则表达式的基本规则>>>forminre.finditer("信号+","没有啊,我这的信号信号非常...嗯?信号号~~"):print(m)<re.Matchobject;span=(7,9),match='信号'><re.Matchobject;span=(9,11),match='信号'><re.Matchobject;span=(18,21),match='信号号'>
【例】“信号+”能匹配“信号号”和“信号”,但不能匹配“信号信号”,实例如下正则表达式的基本规则>>>forminre.finditer("[^*]","喂*喂**,你**在**,我**不知***~~~"):print(m)<re.Matchobject;span=(0,1),match='喂'><re.Matchobject;span=(2,3),match='喂'><re.Matchobject;span=(5,6),match=','><re.Matchobject;span=(6,7),match='你'><re.Matchobject;span=(9,10),match='在'><re.Matchobject;span=(12,13),match=','><re.Matchobject;span=(13,14),match='我'><re.Matchobject;span=(16,17),match='不'><re.Matchobject;span=(17,18),match='知'><re.Matchobject;span=(21,22),match='~'><re.Matchobject;span=(22,23),match='~'><re.Matchobject;span=(23,24),match='~'>【例】用特殊字符“^”对方括号中的内容“取非”“*”、“+”和“?”及之后介绍的“|”都会失去含义正则表达式的基本规则>>>forminre.finditer(r"[^\*]",r"喂*喂\\**,你**在**,我**不知***~~~"):print(m)<re.Matchobject;span=(0,1),match='喂'><re.Matchobject;span=(2,3),match='喂'><re.Matchobject;span=(3,4),match='\\'><re.Matchobject;span=(4,5),match='\\'><re.Matchobject;span=(7,8),match=','><re.Matchobject;span=(8,9),match='你'>【例】在模式字符串中使用了转义字符实例正则表达式的基本规则<re.Matchobject;span=(11,12),match='在'><re.Matchobject;span=(14,15),match=','><re.Matchobject;span=(15,16),match='我'><re.Matchobject;span=(18,19),match='不'><re.Matchobject;span=(19,20),match='知'><re.Matchobject;span=(23,24),match='~'><re.Matchobject;span=(24,25),match='~'><re.Matchobject;span=(25,26),match='~'>【例】在模式字符串中使用了转义字符实例正则表达式的基本规则`010203初学者对于特殊字符全部使用转义要结果是去掉文本中的星号,不使用匹配应该使用模式替换正则表达式的基本规则
判断网址的类型可以用顶级域名教育机构
顶级域名一定是“.org”非营利性组织
顶级域名一定是“.edu”正则表达式的基本规则你可以在找到Python的详细资料也可访问关注厦门大学的最新信息包含多少个教育机构和非营利性组织的网址正则表达式的基本规则>>>forminre.finditer("(.edu)|(.org)","你可以在找到Python的详细资料,也可以访问关注厦门大学的最新信息"): print(m)<re.Matchobject;span=(17,21),match='.org'><re.Matchobject;span=(54,58),match='.edu'>【例】
用特殊符号“()”判断字符串包含的教育机构和非营利性组织的网址实例如下从执行结果可以看出,会找到所有.org和.edu的匹配正则表达式的基本规则>>>re.search("(.edu)|(.org)","你可以在找到Python的详细资料,也可以访问关注厦门大学的最新信息")<re.Matchobject;span=(17,21),match='.org'>【例】
用特殊符号“()”判断字符串包含的教育机构和非营利性组织的网址实例如下从执行结果可以看出,只要找到一个.org结果以后,就不会继续寻找.edu正则表达式的基本规则>>>re.search("(.edu)|(.org)","你可以访问关注厦门大学的最新信息,也可以在找到Python的详细资料")<re.Matchobject;span=(19,23),match='.edu'>【例】
用特殊符号“()”判断字符串包含的教育机构和非营利性组织的网址实例如下从执行结果可以看出,只要找到一个.edu结果以后,就不会继续寻找.org正则表达式的基本规则匹配结果里将“.edu”和“.org”当成了一个整体进行匹配。另外,上例在模式字符串中使用了一个新的特殊字符“|”,这个特殊字符表示“或”,它连接的是两个正则表达式,匹配文字只要满足“或”连接的第一个正则表达式,就视为匹配成功,就不再继续匹配另一个正则表达式正则表达式的基本规则>>>re.search("你好|是我","你是我啊")<re.Matchobject;span=(1,3),match='是我'>【例】
使用一个新的特殊字符“|”,具体实例如下“|”连接的是两个正则表达式,第1个re.search是匹配“你好”或者“是我”,在“你是我啊”里面,只存在“是我”。正则表达式的基本规则>>>re.search("你(好|是)我","你是我啊")<re.Matchobject;span=(0,3),match='你是我'>【例】
使用一个新的特殊字符“|”,具体实例如下使用圆括号限定了取“或”的范围,“|”连接的两个正则表达式是“好”和“是”,因此,这个re.search语句的真实含义是匹配一个“你”字,一个“好”或者“是”字,以及一个“我”字,等同于“你[好是]我”。正则表达式的基本规则>>>re.search("我|我们","这是我们的歌")<re.Matchobject;span=(2,3),match='我'>【例】
使用一个新的特殊字符“|”,具体实例如下“|”连接的是“我”和“我们”。由于在匹配时,只要满足任何一个就不在匹配,匹配出“我”字之后,这个正则就不会再匹配后面的部分。因此,可得出结论是,这个正则表达式永远也不可能匹配出“我们”二字正则表达式的基本规则13开头的和18开头130-139和180-189都有手机号存在14开头除了142和143其它都可以用15和19开头除了154和194都可以用133开头的11位手机号133[0-9]{8}”16开头只有2、5、6、7可以用17开头170-178都可以用正则表达式的基本规则正则表达式可以写成如下形式1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}由于15开头的号段分成了两个部分,书写时绝对不可以把“5[0-35-9]”书写成“5[0-3,5-9]”正则表达式的基本规则>>>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}","15,11122233")<re.Matchobject;span=(0,11),match='15,11122233'>【例】
逗号在正则表达式里不是特殊字符,它就被视为了一个普通字符,因此会导致严重错误如果每个数字要写成[0-9]
相对较麻烦正则表达式的基本规则正则表达式中常用的简化记法记法匹配内容\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]正则表达式的基本规则>>>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.Matchobject;span=(0,11),match='
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 节能绿色建筑标准承诺书(8篇)
- 市场营销专员熟练运用SEO优化指导书
- 节水与水资源管理作业指导书
- 人力资源管理流程与标准工具集
- 深部真菌感染诊疗指南2026
- 企业团队建设活动策划框架
- 企业财务风险评估及预防指南
- 个人学业规划承诺书(8篇)
- 2026河北保定明大高级中学教师招聘笔试模拟试题及答案解析
- 老年营养的护理
- 上海市徐汇区2026届高三一模生物试卷(含答案)
- 分级诊疗下的医疗成本效益分析路径
- 110接警员培训课件
- 2025年机场运行与管理面试题库及答案
- GB/T 3934-2025普通螺纹量规技术条件
- 2025年10月自考15041毛中特试题及答案
- 临床护理带教风险防范
- 静脉输液治疗规范与并发症预防
- 国土空间规划课件 第三讲 国土空间规划体系
- 皖北卫生职业学院单招职业适应性测试题库及答案解析
- 2025年智能穿戴设备数据采集合同
评论
0/150
提交评论