re 模块详解

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'))
原文地址:https://www.cnblogs.com/zhangqing979797/p/9497052.html