模块 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())
模块进阶
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'))
















