一.简介
用于string的模糊匹配,而string内置的方法是精确匹配。
二.字符匹配
1 普通字符
用于精确匹配
2 元字符
. ^ $ * + ? { } | ( )
. 通配符除 其余均可匹配
^ 位置匹配,表示开始 $ 表示结束
import re ret=re.findall("^af","afghaf") print(ret) ret=re.findall("af$","afdfggaf") print(ret)
*,+,?,{}均表示重复次数
* 0~+oo
+ 1~+oo
? 1或0
{n,m} 表示n~m次 {1,}表示1到正无穷
[ ]一次只能匹配一个,可以表示一个匹配集,又有取消元字符的功能
[ ]中的特殊字符: ^取反 -表示范围
import re ret = re. findall( "[^4,5]" , "dgg4ffd5dd" ) print(ret) ret = re. findall("[^a-z,4,5]" ,"sccf5673374" ) print(ret)
:后面跟元字符,去除其特殊化,后面跟普通字符,增加特殊功能。
d D 表示数字 [0-9] s S表示空白字符[ fv]
w W表示[a-zA-Z0-9] 匹配一个特殊字符的边界,而不是匹配特殊字符(这里的特殊字符是非字母和数字的)
import re ret = re.findall(r "I","hello I am a LI$T") print(ret) ret = re.findall("a\\","asgvff")#匹配反斜杠 print(ret)
四个反斜杠,Python解释一个需要2个,re模块对这2个进行转义要4个。
( ):表示分组
import re ret = re.search("(?p<id>d{11}),(?p<name>[a-z]*) ","1445676556777567785ffhtfcg6") ret1=ret.group("id") ret2 = ret.group("name") print(ret1,ret2)
|:表示或者用于分组
三.re 模块的函数
1.re.findall(匹配模型,母串)//贪婪匹配找到所有匹配的,返回一个列表。
2.re.search(匹配模型,母串)#只匹配一个,以对象的形式返回,用group()函数获取对象的内容。
3,re.match(匹配模型,母串)#同search只不过,仅匹配开始的地方,
4.group(分组的名称)#该函数可以不带参数,一般与search和match搭配使用。
import re #5 ret=re.split('[ab]',"abcd") #先按‘a'进行分割得到’bcd',再对bcd按‘b'进行分割 print(ret) #["","","cd"] ret=re.sub('d',"abc","alivf4jhj6",1) #替换函数,最后一个参数是指定替换几次 print(ret) ret=re.subn('d',"abc","alivf4jhj6") #替换所有满足条件的,并返回替换的次数 print(ret) #("alivvfabcjhjabc",2) ret=re.complex("[ab]") #将一种匹配规则转换成一个对象。
四,惰性匹配
前面的* + ?都是贪婪匹配,后面加上?使其变成惰性匹配。