re(regular expression)就是正则表达式英文的缩写,也就是说python利用正则进行一些查找,替换等工作。
re模块的方法:
1,查找
findall,匹配所有,每一项都是列表中的一个元素,从大段地内容中找出匹配的项,常用指数5星,缺点是提取出来的数据量如果过大不能及时处理的话,浪费内存。
import re ret = re.findall("\d+","sajdaijdi123124sad12") print(ret) #['123124', '12']
search 主要用于表单验证,返回的是一个正则匹配的结果,只匹配从左到右的第一个。
import re ret = re.search("\d+","sajdaijdi123124yfcy23423") print(ret.group()) #123124
group的功能是把匹配结果显示出来,如果匹配失败,print(ret)是none,故group(ret)会报错.
match 相当于search参数中的正则表达式前加上^,就是除了,取反的意思,例如匹配\d+,^/d+就是除了数字.
import re ret = re.search("[^\d]+","sjdakjdk123124") print(ret.group()) #sjdakjdk
2,替换
sub(正则,要替换的,实施的字符串,替换次数)
subn()功能和sub没太大区别 ,就是能返回替换次数.
import re s = "我很2,你也很2" ret = re.sub("\d","帅",s,1) #如果不写次数,默认全部 print(ret) #我很帅,你也很2
3,分割
split, 和字符串时候使用的方法差不多.注意 被切割的地方会消失不见.
import re s = "小刘和兄贵1小李和小梅" ret = re.split("\d",s)5[ print(ret) #['小刘和兄贵', '小李和小梅']
进阶之compile
把正则表达式进行预编译,节省时间
import re ret = re.compile("\d+") res = ret.findall("jksajd123") print(res) #["123"]
进阶之finditer
返回迭代器,可以通过for循环读取数据,节省空间.
import re ret = re.finditer("\d+","sajdkajd123") for i in ret: print(i.group()) #123
在re中正则表达式的分组的使用
例如:在"<a>wuyuetian</a>"中取出"wuyuetian"
#在findall里,为了findall也能顺利取到分组中的内容,用()会优先取括号内的内容 import re s = "<a>wuyuetian</a>" ret = re.findall(">(\w+)<",s) print(ret)
#分组的序号规则类似于索引,但是记着是从1开始的 s = "<a>wuyuetian</a>" ret = re.search("(>)(\w+)(<)",s) print(ret.group(2)) #wuyuetian
关于分组命名: ?P<name>xxx
s = "<a>wuyuetian</a>" ret = re.search(">(?<contrnt>\w)<",s) print(ret.group(content)