文档名称文档密级2020-3-7华为保密信息,未经授权禁止扩散第1页,共19页1Python之【re模块的正则表达式学习】摘要:re模块包括操作正则表达式的函数,一些工作中都需要用到,现在说明下使用方法。使用说明:一,re模块下的函数:1,compile:importrepat=re.compile('A')m=pat.search('CBA')printm_sre.SRE_Matchobjectat0x9d690c8#匹配到了,返回MatchObject(True)m=pat.search('CBD')printmNone#没有匹配到,返回None(False)#上面的等价于re.search('A','CBA')函数描述compile(pattern)创建模式对象search(pattern,string)在字符串中寻找模式match(pattern,string)在字符串开始处匹配模式split(pattern,string)根据模式分割字符串findall(pattern,string)列表形式返回匹配项sub(pat,repl,string)pat匹配想用repl替换escape(string)特殊字符转义文档名称文档密级2020-3-7华为保密信息,未经授权禁止扩散第2页,共19页_sre.SRE_Matchobjectat0xb72cd170#推荐都用第一种方法说明:将正则表达式转换为模式对象,实现更有效率的匹配,因为其他的函数会在内部进行转换。2,search:m=re.search('asd','ASDasd')printm_sre.SRE_Matchobjectat0xb72cd6e8#匹配到了,返回MatchObject(True)m=re.search('asd','ASDASD')printmNone#没有匹配到,返回None(False)说明:在给定的字符串中寻找第一个匹配给正则表达式的子字符串,有多个也只返回第一个出现的。3,match:m=re.match('a','Aasd')printmNone#没有匹配到,返回None(Falsem=re.match('a','aASD')printm_sre.SRE_Matchobjectat0xb72cd6e8#匹配到了,返回MatchObject(True)可以用第一个方法:compilepat=re.compile('a')printpat.match('Aasd')Noneprintpat.match('aASD')_sre.SRE_Matchobjectat0xb72cd6e8说明:在给定的字符串的开头匹配正则表达式。文档名称文档密级2020-3-7华为保密信息,未经授权禁止扩散第3页,共19页上面的函数返回都可以在if条件语句中进行判断:ifpat.search('asd'):...print'OK'...OK#找到返回ifre.search('a','ASD'):...printOK...#没有找到4,split:re.split(',','a,s,d,asd')['a','s','d','asd']#返回列表pat=re.compile(',')pat.split('a,s,d,asd')['a','s','d','asd']#返回列表re.split('[,]+','a,s,d,,,,,asd')#正则匹配:[,]+,后面说明['a','s','d','asd']re.split('[,]+','a,s,d,,,,,asd',maxsplit=2)#maxsplit最多分割次数['a','s','d,,,,,asd']pat=re.compile('[,]+')#正则匹配:[,]+,后面说明pat.split('a,s,d,,,,,asd',maxsplit=2)#maxsplit最多分割次数['a','s','d,,,,,asd']说明:根据模式的匹配项来分割字符串,类似字符串的split的方法,但是字符串的split只能用固定长度的分割符,而re.split允许用任意长度和个数的分割符。5,findall:re.findall('a','ASDaDFGAa')['a','a']#列表形式返回匹配到的字符串pat=re.compile('a')pat.findall('ASDaDFGAa')['a','a']#列表形式返回匹配到的字符串文档名称文档密级2020-3-7华为保密信息,未经授权禁止扩散第4页,共19页pat=re.compile('[A-Z]+')#正则匹配:'[A-Z]+'后面有说明pat.findall('ASDcDFGAa')['ASD','DFGA']#找到匹配到的字符串pat=re.compile('[A-Z]')pat.findall('ASDcDFGAa')#正则匹配:'[A-Z]+'后面有说明['A','S','D','D','F','G','A']#找到匹配到的字符串pat=re.compile('[A-Za-z]')#正则匹配:'[A-Za-z]+'匹配所有单词,后面有说明pat.findall('ASDcDFGAa')['A','S','D','c','D','F','G','A','a']说明:列表形式返回给定模式的匹配项。返回所有匹配的字符串。6,sub:re.sub('a','A','abcasd')#找到a用A替换,后面见和group的配合使用'AbcAsd'pat=re.compile('a')pat.sub('A','abcasd')'AbcAsd'#通过组进行更新替换:pat=re.compile(r'(.*)\..{3}')#正则表达式pat.match(').group(1)'dxy'pat.sub(r'\1','hello,)#通过正则匹配找到符合规则的”“,取得组1字符串去替换整个匹配得到字符串。dxy-=re.compile(r'(\w+)(\w+)')#正则表达式s='helloworld!hellohz!'pat.findall('helloworld!hellohz!')[('hello','world'),('hello','hz')]pat.sub(r'\2\1',s)#通过正则得到组1(hello),组2(world),再通过sub去替换。即组1替换组2,组2替换组1,调换位置。'worldhello!hzhello!'说明:使用给定的内容替换掉找到的字符串。a-A文档名称文档密级2020-3-7华为保密信息,未经授权禁止扩散第5页,共19页dir(m)['__class__','__copy__','__deepcopy__','__delattr__','__doc__','__format__','__getattribute__','__hash__','__init__','__new__','__reduce__','__reduce_ex__','__repr__','__setattr__','__sizeof__','__str__','__subclasshook__','end','endpos','expand','group','groupdict','groups','lastgroup','lastindex','pos','re','regs','span','start','string']7,escape:re.escape(')'转义说明:对字符串里面的特殊字符串进行转义。上面的函数中,只有match、search有group方法,其他的函数没有。二,函数的方法:dir(m)['__class__','__copy__','__deepcopy__','__delattr__','__doc__','__format__','__getattribute__','__hash__','__init__','__new__','__reduce__','__reduce_ex__','__repr__','__setattr__','__sizeof__','__str__','__subclasshook__','end','endpos','expand','group','groupdict','groups','lastgroup','lastindex','pos','re','regs','span','start','string']这里介绍几个:pat=re.compile(r'(.*)\.(.*)')#用()表示一个组,2个组m=pat.match(')m.group()#默认为0,表示匹配整个字符串'方法描述group获取子模式(组)的匹配项start给定组匹配项的开始位置end给定组匹配项的结束位置span给定组匹配项的开始结束位置文档名称文档密级2020-3-7华为保密信息,未经授权禁止扩散第6页,共19页m.group(1)#返回给定组1匹配的子字符串'dxy'm.group(2)'com'm.start(2)#组2开始的索引8m.end(2)#组2结束的索引11m.span(2)#组2开始、结束的索引(8,11)m1=pat.search(')m1.group()'(1)'dxy'm1.group(2)'com'm1.start(2)8文档名称文档密级2020-3-7华为保密信息,未经授权禁止扩散第7页,共19页三,正则表达式:文档名称文档密级2020-3-7华为保密信息,未经授权禁止扩散第8页,共19页文档名称文档密级2020-3-7华为保密信息,未经授权禁止扩散第9页,共19页1,元字符:使用:#.:通配符pat=re.compile('.')pat.match('abc')_sre.SRE_Matchobjectat0xb72b6170pat.match('abc').group()'a'#匹配到了首个字符pat.search('abc').group()'a'pat.match('\n').group()#换行符匹配出错Traceback(mostrecentcalllast):Filestdin,line1,inmoduleAttributeError:'NoneType'objecthasnoattribute'group'#\:转义符pat=re.compile('\.')pat.search('abc.efg').group()#匹配到.'.'pat.findall('abc.efg')#不用group,返回列表['.']字符描述.除换行符外的任意字符\转义字符[...]字符集合\d数字:[0-9]\D非数字[^0-9]\s空白字符[\t\r\n\f、空格]\S非空白字符[^\s]\w单词字符[A-Za-z0-9]\W非单词字符[^\w]文档名称文档密级2020-3-7华为保密信息,未经授权禁止扩散第10页,共19页#[...]:集合,匹配里面的任意一个元素pat=re.compile('[abc]')pat.