1.正则表达式#^表示在字符串开头匹配,$表示在字符串结尾匹配
#*匹配0到无穷多个 #+匹配1到无穷多个 #?匹配0或者1个 #{}定义匹配个数{0,}==*,{1,}==+,{0,1}==?,{6}=={1,6} #上面的元字符一般都是贪婪匹配,在后面加上?变成惰性匹配 #[]匹配括号里的字符,只匹配一次,^表示不包含,-表示范围,表示转义字符,其他在中括号里都无特殊意义 #d 匹配任何十进制的数 #D 匹配任何非数字字符 #s 匹配任何空白字符 #S 匹配任何非空白字符 #w 匹配任何字母数字字符 #W 匹配任何非字母数字字符 # 匹配一个特殊边界字符,比如空格,#,& #?:去匹配优先级 import re ret = re.findall("www.(baidu|163).com","www.baidu.com") print(ret) ret = re.findall("www.(?:baidu|163).com","www.baidu.com") print(ret)
#注:类似由于在python解释器上会默认转化,这样传到re解释器上就会有差异,所以在re模块下应该变为\b或者用r''
2.re模块的方法
#search()匹配一个就返回,返回一个对象,如果匹配不到就不返回,用group()方法调用,如果正则表达式用分组形式如(?p<name>[a-z]+)则可用group(name)取出对应分组匹配的内容 #match()从开头开始匹配,匹配一个就返回,返回一个对象,同样用group()调用 #findall()所有符合正则表达式的都匹配,返回一个列表 #split()用正则表达式匹配的字符串进行分割,如re.split("[ab]","abc")结果为[" "," ","c"]先按照a分割再对结果按照b分割 #compile()绑定正则表达式 import re com = re.compile("d+") print(com.findall("fjsdf123eewfwe564sdf")) #结果为:['123', '564'] #finditer()所有符合正则表达式的都匹配,返回一个迭代器 import re ret = re.finditer("d","sdf145dfsdf5456") print(next(ret).group()) print(next(ret).group()) #结果为1 # 4 #sub()将正则表达式匹配的字符串替换成指定字符串如:re.sub("d","A","a12f")结果为"aAAf",默认为全部替换,也可指定替换次数,如:re.sub("d","A","a12f",1)表示只匹配一次,结果为"aA2f" #subn()跟sub()功能一样,返回的是一个元组,包含结果跟匹配的次数