Python程序设计第10章-正则表达式课件.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《Python程序设计第10章-正则表达式课件.pptx》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python 程序设计 10 正则 表达式 课件
- 资源描述:
-
1、2022-6-3第第10章章 正则表达式正则表达式目录目录2022-6-3210.1 正则表达式简介10.2 简单模式10.3 使用正则表达式10.4 更多模式功能10.5 修改字符串10.6 常见问题2022-6-310.1正则表达式简介正则表达式(Regular Expressions),通常被简称为REs或regexes,是一些由字符和特殊符号组成的字符串,它们描述了这些字符和字符的某种重复方式,因此能按某种模式匹配一个有相似特征的字符串的集合,也能按某模式匹配一系列有相似特征的字符串。正则表达式提供了一种紧凑的表示法,可用于表示字符串的组合,其之所以功能如此强大,是因为一个单独的正则表
2、达式可以表示无限数量的字符串,只要字符串满足正则表达式的需求即可。正则表达式为高级文本模式匹配,以及文本的搜索与替代等功能提供了基础。目录目录2022-6-3210.1 正则表达式简介10.2 简单模式10.3 使用正则表达式10.4 更多模式功能10.5 修改字符串10.6 常见问题2022-6-310.2 简单模式10.2.1 字符匹配绝大多数字符会与自身匹配。例如,正则表达式test会和字符串“test”完全匹配。这个规则也会有例外,有种字符比较特殊,我们把它们称作元字符(Metacharacters),它们和自身并不匹配,而是会和一些特殊的东西匹配,或者通过某种方式影响到正则表达式的其
3、他部分。元字符的完整列表如下:. $ * + ? | ( )2022-6-310.2 简单模式10.2.1 字符匹配元字符“”与“” 用于指定一个字符类,所谓字符类就是你想匹配的一个字符集。字符可以单个列出,也可以用以“-”号分隔的两个给定字符来表示一个字符区间。举个简单的例子,abc将匹配“a”“b”或“c”中的任意一个字符,使用区间a-c来可以达到与前者一样的目的。只匹配小写字母,那么正则表达式应写成a-z元字符在字符类里并不起作用。例如,abc$将匹配字符。“a”“b”“c”或“$”中的任意一个,虽然“$”通常用作元字符,但在字符类里,其特性被除去,恢复成普通字符。可以用补集来匹配不在区
4、间范围内的字符。其做法是把“”作为字符类的首个字符,其他地方的“”字符只会简单匹配“”字符本身。例如,5将匹配除了“5”之外的任意字符,而5只会匹配字符“5”和“”。2022-6-310.2 简单模式10.2.1 字符匹配另一个重要的元字符是反斜杠“”。 “”为Python中的字符串转义字符,可以通过在反斜杠后面加不同的字符以表示不同特殊意义。它也可以用于取消所有的元字符,这样就能够在模式中匹配它们。例如,如果我们需要匹配字符“”或“”,可以在它们之前用反斜杠来取消它们的特殊意义:“”或“”。一些用“”开始的特殊字符表示预定义的字符集,例如数字集、字母集或其他非空字符集等。2022-6-310
5、.2 简单模式Python的预定义字符集如下:预预设设特特殊殊字符字符说说 明明d匹配任何十进制数,它相当于类 0-9D匹配任何非数字字符,它相当于类0-9s匹配任何空白字符,它相当于类tnrfvS匹配任何非空白字符,它相当于类tnrfvw匹配任何字母数字字符,它相当于类a-zA-Z0-9_W匹配任何非字母数字字符,它相当于类a-zA-Z0-9_2022-6-310.2 简单模式10.2.2 重复正则表达式的另一个功能是可以指定正则表达式的某一部分的重复次数。我们讨论的第一个具有重复功能的元字符是“*”。“*”并不匹配字符“*”,它表示前一个字符可以被匹配任意次数,包括零次。例如,“ca*t”
6、将匹配“ct”(0个“a”字符),“cat”(1个“a”字符),“caaat”(3个“a”字符)等。2022-6-310.2 简单模式10.2.2 重复像“*”这样的重复我们称作是贪婪的(Greedy)。当重复一个正则表达式时,匹配引擎会试图重复尽可能多的次数。如果模式的后面部分没有被匹配,匹配引擎将退回并再次尝试更小的重复。例如,模式“abcd*b”。它首先匹配字母“a”,然后零个或更多个来自字符类bcd中的字母,最后以“b”结尾。现在考虑该正则表达式对字符串“abcbd”的匹配。匹配过程如下表所示:2022-6-310.2 简单模式步步 骤骤匹配字匹配字符符注注 解解1a匹配正则表达式中的
7、“a”2abcbd引擎尽可能多地匹配 bcd中的字符,这里匹配到字符串的结尾3失败引擎尝试匹配“b”,但当前位置已经是字符的最后了,所以失败4abcb退回,bcd*尝试少匹配一个字符5失败再次尝次匹配b,但在当前最后一位字符是“d”6abc再次退回,bcd*只匹配“bc”7abcb再次尝试匹配“b”,当前位置上的字符正好是“b”,匹配成功2022-6-310.2 简单模式10.2.2 重复另一个重复元字符是+,表示匹配一次或更多次,注意+要求所匹配的字符至少出现一次。 “ca+t”就可以匹配“cat”(1个“a”),“caaat”(3个“a”),但“ct”不能匹配。还有一些表示重复的元定符。问
8、号?表示匹配一次或零次,我们可以将它用于标识某字符是可选的。例如:“high-?tech”匹配“high-tech”或“hightech”。最复杂的重复限定符是m,n,其中m和n是十进制整数。m,n表示某个匹配项至少需要重复m次,但不能超过n次。例如,a/1,2b可以匹配a/b和a/b,但不能匹配ab与a/b。可以省略m和n中的任意一个,省略m表示重复下限为0,而省略n则表示重复上限为无穷。目录目录2022-6-3210.1 正则表达式简介10.2 简单模式10.3 使用正则表达式10.4 更多模式功能10.5 修改字符串10.6 常见问题2022-6-310.3 使用正则表达式10.3.1
9、编译正则表达式Python中通过re模块提供了一个正则表达式引擎的接口,利用这个接口,我们可以将正则表达式编译成对象并用它们来进行匹配。正则表达式被编译成正则表达式对象(Regular Expression Objects),可以为不同的操作提供方法,如模式匹配搜索或字符串替换。使用如下代码编译正则表达式对象: import re p = pile(ab*) pile(ab*)2022-6-310.3 使用正则表达式10.3.2 反斜杠带来的问题则表达式用反斜杠字符“”来表示特殊格式或在不触发其特殊方法的情况下使用特殊字符。这就与Python在字符串中起相同作用的反斜杠字符产生了冲突。例如,为
10、了匹配字符串“section”,正则表达式需要在所有反斜杠字符和其他元字符前添加反斜杠来取消其特殊意义,即要匹配的字符串在程序中应该写成“section”。当把这个字符串作为参数传传递给pile()时必须还是“section”。作为Python的字符串值,“section”中的两个反斜杠还要再次使用反斜杠取消特殊意义,最后结果就变成了“section”。也就是说,为了匹配一个反斜杠,必须在正则表达式字符串中写四个反斜杠,导致输入大量重复的反斜杠,而且所生成的字符串也很难理解。2022-6-310.3 使用正则表达式10.3.2 反斜杠带来的问题解决的办法就是为正则表达式使用Python的原始(
11、raw)字符串表示,在字符串前加上字符“r”,反斜杠就不会被任何特殊方式处理,所以rn就包含“”和“n”的两个字符,而“n”则表示一个字符,即换行。正则表达式在Python代码中通常都是用这种原始字符串表示。如果想要匹配字符串“section”,其原始字符串的表示法应为:rsection。2022-6-310.3 使用正则表达式10.3.3 执行匹配下表给出了正则表达式对象几个最常用的方法:方方 法法目目 的的match()判断从字符串开头是否匹配正则表达式search()搜索整个字符串,找到正则表达式匹配的位置findall()找到所有匹配正则表达式的子串,并将它们作为一个列表返回findi
12、ter()找到所有匹配正则表达式的子串,并将它们作为一个迭代器返回2022-6-310.3 使用正则表达式10.3.3 执行匹配如果匹配失败,match()和search()将返回None。如果匹配成功,就会返回一个 match对象的实例,其中有此次匹配的信息:比如,匹配是从哪里开始在哪里结束,所匹配的子串等。match对象中重要的方法如下表所示:方方 法法目目 的的group()返回匹配正则表达式的字符串start()返回匹配字符串开始的位置end()返回匹配字符串结束的位置span()返回一个包含开始和结束位置的元组2022-6-310.3 使用正则表达式10.3.4 模块级函数re模块提
13、供了顶级函数调用,例如match()、search()、sub()等。没有必要先创建一个正则表达式对象,再调用它的方法。这些函数使用正则表达式字符串作为第一个参数,而后面的参数则与相应正则表达式对象的方法参数相同,返回则要么是None,要么是一个match对象的实例。2022-6-310.3 使用正则表达式10.3.5 编译标志使用编译标志可以修改正则表达式的一些运行方式。在re模块中编译标志可以使用两种形式表示,一是如同IGNORECASE的全名,另一种是一个字母的缩写形式,例如IGNORECASE缩写为I。多个标志可以通过使用或符号“|”来分隔,如“re.I | re.M”表示同时设置I和
14、M标志,该标志在编译正则表达式对象时,以参数的形式输入。2022-6-310.3 使用正则表达式10.3.5 编译标志标标 志志含含 义义ASCII,A使w,b等只匹配ASCII字符DOTALL,S使字符“.”匹配任意字符,包括换行符IGNORECASE,I使匹配对大小写不敏感LOCALE,L做本地化识别(locale-aware)匹配MULTILINE,M多行匹配,会影响VERBOSE,X能够使用正则表达式的verbose状态,使之更加清晰易懂Python正则表达式的编译标志由下表所示:目录目录2022-6-3210.1 正则表达式简介10.2 简单模式10.3 使用正则表达式10.4 更多
展开阅读全文