import re 引用re模块
查找
finall:匹配所有,每一项都是列表中的一个元素
search:只匹配从左到右的第一个,得到的不是直接的结果而是一个变量,通过group方法获取结果,没有匹配到会返回None,使用group会报错
match:从头开始匹配,相当于search中的正则表达式加上一个^
字符串处理的扩展: 替换 切割
split 切割
sub 替换 格式re.sub(旧的,新的,字符串,替换次数)
subn 返回一个元组,第二个元素是替换的次数
re模块的进阶:时间/空间
compile 节约你使用正则表达式解决问题的时间
ret = re.compile('d+') # 已经完成编译了 print(ret) res = ret.findall('alex83taibai40egon25') print(res)
finditer 节省你使用正则表达式解决问题的空间/内存
ret = re.finditer('d+','alex83taibai40egon25') for i in ret: print(i.group())
rearch() .group() 括号中的数字代表的是去对应分组中的内容
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)) # 数字参数代表的是取对应分组中的内容
findall() 中有一个特殊的语法,优先显示正则表达式中()括号的内容
取消分组优先(?:正则表达式)
ret = re.findall('d+(?:.d+)?','1.234*4')
print(ret)
关于分组:
1、对正则表达式来说,有时候我们需要进行分组,来约束某一字符出现的次数(.[w]+)?
2、对python语言来说,分组可以帮助你更好更精准的找到你真正需要的内容,例<(w+)>(d+)<
split
1 ret = re.split('d+','alex83taibai40egon25') 2 print(ret) 3 ret = re.split('(d+)','alex83taibai40egon25aa') 4 print(ret)
python 与正则表达式 之间的特殊约定
1、分组命名(?P<这个组的名字>正则表达式)
2、使用前面的分组,要求使用这个名字的分组和前面同名分组中的内容匹配的必须一致
pattern = '<(?P<tab>w+)>(w+)</(?P=tab)>' ret = re.search(pattern,s) print(ret