Python之re模块Python用"\\\\"表示正则表达式中的"\",因为正则表达式中如果要匹配"\",需要用\来转义,变成"\\",而Python语法中又需要对字符串中每一个\进行转义,所以就变成了"\\\\"。为了使正则表达式具有更好的可读性,Python特别设计了原始字符串(rawstring)rawstring就是用'r'作为字符串的前缀,如r"\n":表示两个字符"\"和"n",而不是换行符了。Python中写正则表达式时推荐使用这种形式。例如:funshion.com可以使用’funshion\\.com’或者r’funshon\.com’进行匹配需要提醒你的是,在写文件路径的时候就不要使用rawstring了,这里存在陷阱。一: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\.)?funshion\.com',str)可以匹配funshion.comwww.funshon.comXXX.funshion.comm=re.search(r'^(www\.)?funshion\.com',str)可以匹配www.funshion.com和funshion.com在元字符[]中,"^"在不同位置所代表的意义。>>>re.search("[^abc]","abcd")#"^"在首字符表示取反,即abc之外的任意字符。<_sre.SRE_Matchobjectat0x011B19F8>>>>m=re.search("[^abc]","abcd")>>>m.group()'d'>>>m=re.search("[abc^]","^")#如果"^"在[]中不是首字符,那么那就是一个普通字符>>>m.group()'^'元字符($)匹配字符串的结尾或者字符串结尾的换行之前。>>>m=re.search("foo.$","foo1\nfoo2\n",re.MULTILINE)>>>printm.group()foo1(3)有几点注意的地方:1.{m.n}用来表示前面正则表达式重复m到n次,尝试匹配尽可能多的copy。>>>re.findall("a{2,4}","aaaaaaaa")['aaaa','aaaa']#可以看到{m,n},正则表达式优先匹配n,而不是m,因为结果不是["aa","aa","aa","aa"]>>>re.findall("a{2}","aaaaaaaa")['aa','aa','aa','aa']#匹配重复两次>>>re.findall("a{2,4}?","aaaaaaaa")['aa','aa','aa','aa']#{m,n}?用来表示前面正则表达式的m到n次copy,尝试匹配尽可能少的copy2.元字符“.”在默认模式下,匹配除换行符外的所有字符。在DOTALL模式下,匹配所有字符,包括换行符。>>>m=re.match(".","\n")>>>printmNone>>>m=re.match(".","\n",re.DOTALL)>>>print"#",m.group(),"#"##3.可以将匹配模式赋值给变量:>>>pat=’[a-zA-Z]+’>>>text=’”Hm…Er…funshion?”funshion!’>>>m=re.findall(pat,text)>>>printm['Hm','Er','funshion','funshion']re模块主要函数re.compile(pattern,flags=0)编译正则表达式,返回RegexObject对象,然后可以通过RegexObject对象调用match()和search()方法。prog=re.compile(pattern)result=prog.match(string)跟result=re.match(pattern,string)是等价的。re.search()和re.match()str=www.funshion.comm=re.match(r'www',str)m不为None等同于m=re.search(r’^www’,str)m=re.match(r'com',str)m等于Nonem=re.search(r’com’,str)m不为Nonere.split(pattern,string,maxsplit=0)通过正则表达式将字符串分离。如果用括号将正则表达式括起来,那么匹配的字符串也会被列入到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(r"\d+",...