Python语言程序设计课件1第5章 正则表达式_第1页
Python语言程序设计课件1第5章 正则表达式_第2页
Python语言程序设计课件1第5章 正则表达式_第3页
Python语言程序设计课件1第5章 正则表达式_第4页
Python语言程序设计课件1第5章 正则表达式_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1第5章正则表达式5.1什么是正则表达式5.2正则表达式的构成5.3正则表达式的模式匹配5.4正则表达式模块re5.5正则表达式对象5.6Match对象5.7正则表达式举例2第5章正则表达式5.1什么是正则表达式5.2正则表达式的构成5.3正则表达式的模式匹配5.4正则表达式模块re5.5正则表达式对象5.6Match对象5.7正则表达式举例35.1什么是正则表达式字符是计算机处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等等。文本是字符的集合,文本也就是字符串。在处理文本字符串时,常常需要检查文本字符串中是否有满足某些规则(模式)的字符串。正则表达式就是用于描述这些规则的。说某个字符串匹配某个正则表达式,通常是指这个字符串里有一部分(或几部分分别)能满足正则表达式给出的规则。具体地说,正则表达式是一些由字符和特殊符号组成的字符串。45.1什么是正则表达式'feelfree+b',可以匹配'feelfreeb'、'feelfreeeb'、'feelfreeeeeb'等,+号表示匹配位于+之前的字符1次或多次出现。'feelfree*b',可以匹配'feelfreb'、'feelfreeb'、'feelfreeeeb'等,*号表示匹配位于*之前的字符0次或多次出现。'colou?r',可以匹配'color'或者'colour',?表示匹配位于?之前的字符0次或1次出现。5第5章正则表达式5.1什么是正则表达式5.2正则表达式的构成5.3正则表达式的模式匹配5.4正则表达式模块re5.5正则表达式对象5.6Match对象5.7正则表达式举例65.2正则表达式的构成正则表达式是由普通字符(例如大写和小写字母、数字等)、预定义字符(例如\d表示0到9的十个数字集[0-9],用于匹配数字)以及元字符(例如*匹配位于*之前的字符或子表达式0次或多次出现)组成的字符序列模式(pattern),也称为模板。模式描述了在搜索文本时要匹配的字符串。在Python中,是通过re模块来实现正则表达式处理的功能。导入re模块后,使用如下的search函数可进行匹配。re.search(pattern,string,flags=0)

#扫描整个字符串并返回第一个成功的匹配pattern:匹配的正则表达式string:要匹配的字符串flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等5.2正则表达式的构成一些用\开始的字符表示预定义的字符。预定义字符描述\d表示0到9的十个数字集[0-9],用于匹配数字\D表示非数字字符集,等价于[^0-9],用于匹配一个非数字字符\f用于匹配一个换页符\n用于匹配一个换行符\r用于匹配一个回车符\s表示空白字符集[\f\n\r\t\v],用于匹配空白字符,包括空格、制表符、换页符等。85.2正则表达式的构成一些用\开始的字符表示预定义的字符。\S表示非空白字符集,等价于[^\f\n\r\t\v],用于匹配非空白字符\w表示单词字符集[a-zA-Z0-9_],用于匹配单词字符\W表示非单词字符集[^a-zA-Z0-9_],用于匹配非单词字符\t用于匹配一个制表符\v用于匹配一个垂直制表符\b匹配单词头或单词尾\B与\b含义相反5.2正则表达式的构成元字符:就是一些有特殊含义的字符。若要匹配元字符,必须首先使元字符“转义”,即,将反斜杠字符\放在它们前面,使之失去特殊含义,成为一个普通字符。元字符描述\

将下一个字符标记为或特殊字符、或原义字符、或向后引用等。'n'匹配字符'n','\n'匹配换行符,'\\'匹配

"\".

匹配任何单字符(换行符\n之外)。要匹配.,需使用\.^...匹配以^后面的...字符序列开头的行首,但在方括号表达式中使用,此时它表示不接受^后面的字符集合。要匹配^字符本身,需使用\^。...$

匹配行尾,匹配以$之前的字符结束的行尾。要匹配$字符本身,需使用\$。5.2正则表达式的构成(...)标记一个子表达式的开始和结束位置。即将位于()内的字符作为一个整体看待。*匹配位于*之前的字符或子表达式0次或多次。要匹配*字符,需使用\*。+匹配位于+之前的字符或子表达式的1次或多次。要匹配+字符,请使用\+。?匹配位于?之前的字符或子表达式0次或1次。当?紧随任何其他限定符(*、+、?、{n}、{n,}、{m,n})之后时,匹配模式是“非贪心的”。“非贪心的”模式匹配搜索到尽可能短的字符串,而默认的“贪心的”模式匹配搜索到尽可能长的字符串。如在字符串“oooo”中,“o+?”只匹配单个o,而“o+”匹配所有o。5.2正则表达式的构成{m}匹配{m}之前的字符m次。{m,n}匹配{m,n}之前的字符m至n次,m和n可以省略,若省略m,则匹配0至n次;若省略n,则匹配m至无限次。[...]匹配位于[...]中的任意一个字符。[^...]匹配不在[...]中的字符,[^abc]表示匹配除了a,b,c之外的字符。|匹配位于|之前或之后的字符。要匹配|,需使用\|。12第5章正则表达式5.1什么是正则表达式5.2正则表达式的构成5.3正则表达式的模式匹配5.4正则表达式模块re5.5正则表达式对象5.6Match对象5.7正则表达式举例5.3正则表达式的模式匹配1)最简单的正则表达式是普通字符串,只能匹配自身,如'abc',只能匹配'abc'。2)'a.c'可以匹配'abc'、'acc'、'adc'等,.可匹配任何单字符。3)'abc*'可以匹配'ab'、'abc'、'abcc'等字符串,*用于匹配位于*之前的字符0次或多次。4)'abc+'可以匹配'abc'、'abcc'、'abccc'等字符串,+用于匹配位于+之前的字符1次或多次。5)'abc?'可以匹配'ab'和'abc'字符串,?用于匹配位于?之前的字符0次或1次。5.3正则表达式的模式匹配6)'ab{2}c'可以匹配'abbc',{2}匹配{2}之前的字符2次。7)'ab{1,2}c',可完整匹配的字符串有2个:'abc'、'abbc'8)'^asddg'可以匹配行首以'asddg'开头的字符串。9)'rld$'可以匹配行尾以'rld'结束字符串。10)'abc|xyz'可以匹配'abc'和'xyz',|用于匹配位于|之前或之后的字符。11)'(abc){2}'可以匹配'abcabc',{2}匹配{2}之前的表达式(abc)2次。12)'a(123|456)b'可以匹配'a123b'和'a456b'。15第5章正则表达式5.1什么是正则表达式5.2正则表达式的构成5.3正则表达式的模式匹配5.4正则表达式模块re5.5正则表达式对象5.6Match对象5.7正则表达式举例5.4正则表达式模块rePython通过re模块提供对正则表达式的支持。re模块中的常用函数如下表所示方法描述pile(pattern[,flags])把正则表达式pattern转化成正则表达式对象,然后可以通过正则表达式对象调用match()和search()方法。re.split(pattern,string[,maxsplit=0,flags])用匹配pattern的子串来分割string,并返回一个列表。5.4正则表达式模块rere.match(pattern,string[,flags])从字符串string的起始位置匹配模式pattern,string如果包含pattern子串,则匹配成功,返回Match对象,失败则返回None。re.search(pattern,string[,flags])若string中包含pattern子串,则返回Match对象,否则返回None。注意,如果string中存在多个pattern子串,只返回第一个。re.findall(pattern,string[,flags])找到模式pattern在字符串string中的所有匹配项,并把他们作为一个列表返回5.4正则表达式模块rere.sub(pattern,repl,string[,count=0,flags])替换匹配到的字符串,即用pattern在string中匹配要替换的字符串,然后把它替换成replescape(string)把string中,除了单词字符,都加上反斜杆/flags:用于控制正则表达式的匹配方式:re.I(表示忽略大小写)、re.L(支持本地字符集的字符)、re.M(多行匹配模式)、re.S(使元字符“.”匹配任意字符,包括换行符)、re.X(忽略模式中的空格,并可以使用#注释)的不同组合(使用“|”进行组合)。repl:用于替换的字符串,也可为一个函数。count:模式匹配后替换的最大次数,默认0表示替换所有的匹配。5.4正则表达式模块re>>>importre>>>re.split('\W+','Words,,,words.words?words')['Words','words','words','words']#如果pattern里使用了圆括号,那么被pattern匹配到的字符串也将作为返回值列表的一部分>>>re.split('(\W+)','Words,words,words.')['Words',',','words',',','words','.','']>>>print(re.escape('Python3_@#$&'))Python3_\@\#\$\&re.escape(string)把string中,除了单词字符,都加上反斜杆/5.4正则表达式模块re>>>s='23432werwre2342werwrew'>>>print(re.match('(\d*)([a-zA-Z]*)',s))#匹配成功<_sre.SRE_Matchobject;span=(0,11),match='23432werwre'>>>>print(re.search('(\d*)([a-zA-Z]*)',s))#匹配成功<_sre.SRE_Matchobject;span=(0,11),match='23432werwre'>>>>re.sub('(\d*)([a-zA-Z]*)','helloworld',s)'helloworldhelloworld'21第5章正则表达式5.1什么是正则表达式5.2正则表达式的构成5.3正则表达式的模式匹配5.4正则表达式模块re5.5正则表达式对象5.6Match对象5.7正则表达式举例5.5正则表达式对象可以把那些经常使用的正则表达式,使用re模块的compile()方法将其编译,返回正则表达式对象RegexObject,然后可以通过正则表达式对象RegexObject提供的方法进行字符串处理。使用编译后的正则表达式对象进行字符串处理,不仅可以提高处理字符串的速度,还可以提供更强大的字符串处理功能。在Python中,是通过pile(pattern)把正则表达式pattern转化成正则表达式对象的,之后可以通过正则表达式对象调用match()、search()和findall()方法进行字符串处理,以后就不用每次去重复写匹配模式。5.5正则表达式对象>>>importre>>>s='Themanwhohasmadeuphismindtowinwillneversay"Impossible".'>>>pattern=pile(r‘\bw\w+\b’)#编译建立正则表达式对象,查找以w开头的单词,\b匹配单词头或单词尾>>>pattern.findall(s)#使用正则表达式对象的findall()方法在s中查找所有以w开头的单词['who','win','will']>>>pattern1=pile(r'\b\w+e\b')#查找以e结尾的单词>>>pattern1.findall(s)['The','made','Impossible']>>>pattern2=pile(r'\b\w{3,5}\b')#查找3-5个长的单词>>>pattern2.findall(s)['The','man','who','has','made','his','mind','win','will','never','say']5.5正则表达式对象>>>importre>>>s='Themanwhohasmadeuphismindtowinwillneversay"Impossible".'>>>pattern3=pile(r'\b\w*[id]\w*\b')#查找含有字母i或d的单词>>>pattern3.findall(s)['made','his','mind','win','will','Impossible']5.5正则表达式对象>>>importre>>>s='Themanwhohasmadeuphismindtowinwillneversay"Impossible".'>>>pattern4=pile('has')#编译生成正则表达式对象,匹配has>>>pattern4.sub('*',s)#将has替换为*'Themanwho*madeuphismindtowinwillneversay"Impossible".'>>>pattern5=pile(r'\b\w*s\b')#编译生成正则表达式对象,匹配以s结尾的单词>>>pattern5.sub('**',s)#将符合条件的单词替换为**'Themanwho**madeup**mindtowinwillneversay"Impossible".'5.5正则表达式对象>>>s='''一段感情,随岁月风干,一帘心事,随落花凋零。谁解落花语?谁为落花赋?忆往昔,一个转身,一个回眸,你我便沾惹一身红尘。如今,没有别离,你我便了却一生情缘,染指苍苍,岁月蹉跎多少记忆终成灰;多少思念化云烟;多少青丝变白发。'''#搜索以“一”开头的子句,[\u4e00-\u9fa5]+匹配一个或多个中文>>>print(re.findall(r'一[\u4e00-\u9fa5]+',s))['一段感情','一帘心事','一个转身','一个回眸','一身红尘','一生情缘']27第5章正则表达式5.1什么是正则表达式5.2正则表达式的构成5.3正则表达式的模式匹配5.4正则表达式模块re5.5正则表达式对象5.6Match对象5.7正则表达式举例5.6Match对象正则表达式模块re和正则表达式对象的match()方法和search()方法匹配成功后都会返回Match对象,其包含了很多关于此次匹配的信息,可以使用Match提供的可读属性或方法来获取这些信息。Match对象提供的可读属性:(1)string:匹配时使用的文本。(2)re:匹配时使用的正则表达式模式pattern对象。(3)pos:文本中正则表达式开始搜索的索引。(3)endpos:文本中正则表达式结束搜索的索引。(4)lastindex:最后一个被捕获的分组在文本中的索引。如果没有被捕获的分组,将为None。(5)lastgroup:最后一个被捕获的分组的别名。如果这个分组没有别名或者没有被捕获的分组,将为None。5.6Match对象--提供的方法:(1)group([group1,…]):获得一个或多个分组截获的字符串;指定多个参数时将以元组形式返回。编号0代表整个匹配的子串;不填写参数时,返回group(0);没有截获字符串的组返回None;截获了多次的组返回最后一次截获的子串。(2)groups():以元组形式返回全部分组截获的字符串。相当于调用group(1,2,…last)。没有截获字符串的组默认为None。(3)groupdict():返回以有别名的组的别名为键、以该组截获的子串为值的字典,没有别名的组不包含在内。(4)start([group]):返回指定的组截获的子串在string中的起始索引(子串第一个字符的索引)。group默认值为0。5.6Match对象Match对象提供的方法:(5)end([group]):返回指定的组截获的子串在string中的结束索引(子串最后一个字符的索引+1)。group默认值为0。(6)span([group]):返回指定的组截获的子串在string中的起始索引和结束索引的元组(start(group),end(group))。(7)expand(template):将匹配到的分组代入template中返回。template中可以使用\id或\g<id>、\g<name>引用分组,但不能使用编号0。\id与\g<id>是等价的;但\10将被认为是第10个分组,如果你想表达\1之后是字符'0',只能使用\g<1>0。5.6Match对象>>>s='13579helloworld13579helloworld'>>>p=r'(\d*)([a-zA-Z]*)'>>>m=re.match(p,s)>>>m.group(1,2)('13579','helloworld')>>>m.group()#返回整个匹配的子串'13579helloworld'>

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论