1.re 模块 regex
1.查找 :findall
意思"匹配所有,每一项都是列表的组成元素" 有返回值
1 import re 2 ret=re.findall("\d+","sdadadj我5454 4445") 3 print(ret)#这里输出的是列表,而且使用逗号隔开 4 #中间调用re模块 当结果没有匹配时,会显示空列表
2.查找 search
意思:只匹配列表从左到右第一个,得到的不是直接结果,通过变量group()的方法获取结果,没有匹配会报错
1 import re 2 ret=re.search('\d+','15645646456阿杀手锏1354444jkashasjkd').group()#这里group可以放在ret后 3 print(ret)#如果直接输出拿出的是#如果search没有匹配的,会报错,而且只拿第一项 4 #
3.查找:match
意思:就是从头开始匹配,相当于search中加入一个^
1 import re 2 ret=re.match("\d*",'88dasdas小鸡小鸡洗洁精22') 3 print(ret.group())#这里match也需要有一个.group()来输出 4 match就相当于search前面匹配的加上了^ 要是没有匹配到就会报错 5 #
4.替换 sub
意思:找到要替换的一换掉
1 5.import re 2 ret=re.sub("\d+","Q","assd54544jsdas22",1)#前面的是一个正则表达式 3 谁 新的 替换 次数 4 print(ret) 5 6 7 5.1import re 8 ret=re.subn("\d+","Q","assd54544jsdas22",1)#前面的是一个正则表达式 9 谁 新的 替换 次数 10 print(ret)#这里的subn是返回一个元祖,不添加n返回字符串
5.切割 split
意思:这里的切割是将元素切掉,形成一个新的列表
1 import re 2 ret=re.split("a",'acbcd')#这里的切割是将匹配的元素切割掉,形成一个列表 3 print(ret)# 4 import re 5 ret=re.split("(a)",'acbcd')#在匹配的部分上加上()之后所得出的结果是不同的 6 没有()的没有保留用来切割的元素,但是有()可以保留切割下的元素 7 这在某些需要保留匹配的十分重要 8 print(ret)#
6re模块进阶
compile :声明
意思:这里会提前声明好正则,节省后面时间
1 6.import re 2 ret=re.compile("\d+")#compile这里进阶的是可以节省时间,提前声明 3 匹配的元素后面的都可以调用,省去写"\d+"的时间 4 res=ret.search("1拒绝23456") 5 ress=ret.search("硕大的5大声道55") 6 print(res.group()) 7 print(ress.group())
7.re模块进阶
finditer:
意思:返回一个迭代器,所有的结果放到迭代器中,要循环+group的形式取值,节省时间
1 7.import re 2 ret=re.finditer("\d+","alex80taibai40")#优点可以节省内存 3 print(ret)#这里返回的是地址,可以把他当成调用迭代器 4 print(ret.__next__().group())#输出第一项,注意需要在后面加group 5 print(ret.__next__().group())#输出第二项 6 for i in ret:#全部输出 7 print(i.group())
8.()分组技巧
1 import re 2 s = '<a>wahaha</a>' # 标签语言 html 网页 3 ret = re.search('<(\w+)>(\w+)</(\w+)>',s) 4 print(ret.group()) # 所有的结果 5 print(ret.group(1)) # 数字参数代表的是取对应分组中的内容 6 print(ret.group(2)) 7 print(ret.group(3))
1 ret=re.findall("(\w+)",s) print(ret) 2 ret = re.findall('>\w+<',s) 3 print(ret)#['>wahaha<']
1 ret = re.findall('>(\w+)<',s)#当在用findall来获取内容时,有的时候你想要获取的并不 2 是他所展现出的,这个时候可以用()分组来显示优先级但这个只是显示在模块中,在正则表达式 3 在线测试并不适用 4 print(ret)#['wahaha']
取消优先级 ?:
1 10. import re 2 ret=re.findall("\d+(?:\.\d+)?",'1.222*4')#在取消优先级的时候要在你优先级()里面 3 的最前方添加?:可以取消优先级 4 print(ret)
取名 ?p
1 使用这样的必须前后一致 2 s = '<a>wahaha</a>' 3 pattern = '<(\w+)>(\w+)</(\w+)>' 4 ret = re.search(pattern,s) 5 print(ret.group(1) == ret.group(3)) 6 s="sadsadaa" 7 print(s.count("a"))
1 12.import re 2 s="<a>wahaha</a>" 3 ret=re.search(">(?P<zq>\w+)<",s)#分组命名是将(?:<这个组的名字>正则表达式), 4 5 而且这个名字代表这个group的位置 6 print(ret.group(1)) 7 print(ret.group('zq'))