一、re模块下的常用方法
首先在使用re模块之前,需要引入re模块
import re
1.与查找相关的:
1.findall 返回列表,找到所有的匹配项
ret = re.findall("\d+","asda132eqwe啊阿达456") print(ret) # ['132', '456']
2.search 匹配从左到右第一个符合,返回一个变量,通过group方法取到值,没有匹配到就会返回None,使用group会报错。
ret = re.search("\d+","asda132eqwe啊阿达456") print(ret.group()) #132 ret = re.search("\d+","asdaeqwe啊阿达") print(ret.group()) #AttributeError: 'NoneType' object has no attribute 'group'
3.match 相当于在search的正则表达式中加了一个“^”
2.与字符串处理相关的;
1.spilt 返回列表,按照正则规则切割,默认匹配到的内容会被切割掉。
ret = re.split("\d+","asd23sadasd90dasdasd809asd89") #(\d+)可以把切割掉的保留下来 print(ret) # ['asd', 'sadasd', 'dasdasd', 'asd', '']
2.sub、subn 替换,按照正则规则去寻找要被替换的内容,subn返回元组,第二个值是替换的次数。
ret = re.sub("\d+","H","asd23asd34455asd55") print(ret) # asdHasdHasdH ret = re.subn("\d+","H","asd23asd34455asd55") print(ret) # ('asdHasdHasdH', 3)
3.re模块的进阶:时间\空间
1.compile 编译一个正则表达式,用这个结果去search match findall finditer 能节省时间,不用每次使用的时候再去编译了。
ret = re.compile("\d+") res = ret.findall("asd23asd34455asd55") print(res) res = ret.search("asd23asd34455asd55") print(res.group())
2.finditer 返回一个迭代器,所有的结果都在这个迭代器中,需要通过循环+group的形式取值 能够节省内存。
res = re.finditer("\d+","asd23asd34455asd55") print(res) for i in res: print(i.group())
二、分组在re模块中的使用
s = '<a>wahaha</a>' ret = re.search("(>)(\w+)(<)",s) print(ret.group()) #不加参数,默认是匹配所有结果 print(ret.group(1)) #数字参数表示的是取对应分组中的内容 print(ret.group(2)) print(ret.group(3))
ret = re.findall(">(\w+)<",s) print(ret) #['wahaha'] #为了findall也可以顺利取到分组中的内容,有一个特殊的语法,就是优先显示分组中的内容
ret = re.findall('\d+(?:\.\d+)?','1.234*4') print(ret) #['1.234', '4'] #如果按照优先显示,那么结果就不是想要的。所以在括号中加入"?:"就可以取消分组优先,还不会破坏原本的正则表达式。
ret = re.split('(\d+)','alex83taibai40egon25aa') print(ret) #['alex', '83', 'taibai', '40', 'egon', '25', 'aa'] #用split切割后消失的部分,可以用()将正则规则括起来,这样就能得到切割掉的部分
s = '<a>wahaha</a>' ret = re.search(">(?P<com>\w+)<",s) print(ret.group(1)) print(ret.group("com")) #wahaha #wahaha #可以通过在分组中加入"?P<name>",来对这个分组命名,在group给参数时可以给这个组的名字。
#使用前面的分组,要求使用这个名字的分组和前面同名分组中的内容匹配必须一致 s = '<a>wahaha</a>' ret = re.search("<(?P<tag>\w+)>(\w+)</(?P=tag)>",s) print(ret.group()) #<a>wahaha</a>