2022年python的re模块总结 .pdf
Python之 re 模块Python用 表示正则表达式中的 ,因为正则表达式中如果要匹配 ,需要用来转义,变成 ,而 Python语法中又需要对字符串中每一个进行转义,所以就变成了 。为了使正则表达式具有更好的可读性,Python特别设计了原始字符串(raw string)raw string就是用 r 作为字符串的前缀,如 rn:表示两个字符 和n,而不是换行符了。Python中写正则表达式时推荐使用这种形式。例如: 可以使用?或者 r?进行匹配需要提醒你的是,在写文件路径的时候就不要使用raw string了,这里存在陷阱。一:Re 模块正则匹配:(1)d 匹配任何十进制数;它相当于类0-9。D 匹配任何非数字字符;它相当于类0-9。s 匹配任何空白字符;它相当于类 fv。S 匹配任何非空白字符;它相当于类 fv。w 匹配任何字母数字字符;它相当于类a-zA-Z0-9_。W 匹配任何非字母数字字符;它相当于类a-zA-Z0-9_。具有重复功能的元字符:*对于前一个字符重复0 到无穷次+对于前一个字符重复1 到无穷次?对于前一个字符重复0 到 1 次m,n 对于前一个字符重复次数在为m 到 n 次,其中,0,=*,1,=,0,1=?m 对于前一个字符重复m 次(2)和$m=re.search(r(www.)?,str)可以匹配 XXX m=re.search(r(www.)?,str)可以匹配和 在元字符 中,在不同位置所代表的意义。re.search(abc,abcd)#在首字符表示取反,即abc 之外的任意字符。m=re.search(abc,abcd)m.group()d m=re.search(abc,)#如果 在 中不是首字符,那么那就是一个普通字符m.group()元字符($)匹配字符串的结尾或者字符串结尾的换行之前。m=re.search(foo.$,foo1nfoo2n,re.MULTILINE)print m.group()foo1(3)有几点注意的地方:1.m.n用来表示前面正则表达式重复m 到 n 次,尝试匹配尽可能多的copy。名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 4 页 -re.findall(a2,4,aaaaaaaa)aaaa,aaaa#可以看到 m,n,正则表达式优先匹配n,而不是m,因为结果不是aa,aa,aa,aa re.findall(a2,aaaaaaaa)aa,aa,aa,aa#匹配重复两次re.findall(a2,4?,aaaaaaaa)aa,aa,aa,aa#m,n?用来表示前面正则表达式的m 到 n 次 copy,尝试匹配尽可能少的copy2.元字符“.”在默认模式下,匹配除换行符外的所有字符。在DOTALL模式下,匹配所有字符,包括换行符。m=re.match(.,n)print m None m=re.match(.,n,re.DOTALL)print#,m.group(),#3.可以将匹配模式赋值给变量:pat=?a-zA-Z+?text=?”Hm Er funshion?”funshion!?m=re.findall(pat,text)print m Hm,Er,funshion,funshion re 模块主要函数pile(pattern,flags=0)编译正则表达式,返回 RegexObject对象,然后可以通过RegexObject对象调用 match()和 search()方法。prog=pile(pattern)result=prog.match(string)跟result=re.match(pattern,string)是等价的。re.search()和 re.match()str= m=re.match(rwww,str)m 不为 None 等同于m=re.search(r?www?,str)m=re.match(rcom,str)m 等于 None m=re.search(r?com?,str)m 不为 None re.split(pattern,string,maxsplit=0)名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 4 页 -通过正则表达式将字符串分离。如果用括号将正则表达式括起来,那么匹配的字符串也会被列入到list 中返回。maxsplit是分离的次数,maxsplit=1分离一次,默认为0,不限制次数。默认分割符为空格。re.split(W+,Words,words,words.)Words,words,words,re.split(W+),Words,words,words.)Words,words,words,.,re.split(W+,Words,words,words.,1)Words,words,words.特别的:可以利用split(,n?)去掉末尾的换行符re.findall()匹配所有子串,并把它们作为一个列表返回。从左到右有序地返回;如果无匹配,返回空列表。re.findall(a,bcdef)re.findall(rd+,12a32bc43jf3)12,32,43,3 特别的:a=abcdfana1b2c3 m=re.findall(aw+,a,re.MULTILINE)print a,m.group(0)abcdfa,a1b2c3 m=re.findall(rd+,12a,32c,n43j,3,re.MULTILINE)print m 12,43 多行匹配方式(包含n)只有在multiline下可以进行。rearch和 match匹配到就返回,不能匹配到多个结果,findall可以匹配多个结果。上述结果可以验证,是匹配换行符之后,结果提示可以利用“”在 MULTILINE模式可以匹配字符”n”后的字符re.sub()使用给定的替换内容将匹配模式的子字符串替换掉pat=?name?text=?hi name?m=re.sub(pat,?funshion?,text)print m hifunshion re.finditer(pattern,string,flags=0)找到 RE 匹配的所有子串,并把它们作为一个迭代器返回。这个匹配是从左到右有序地返回。如果无匹配,返回空列表。名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 4 页 -it=re.finditer(rd+,12a32bc43jf3)for match in it:print match.group()12 32 43 3 名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 4 页 -