day 17 re模块 正则表达式

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)) # 数字参数代表的是取对应分组中的内容
View Code

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)
View Code

python 与正则表达式 之间的特殊约定

  1、分组命名(?P<这个组的名字>正则表达式)

  2、使用前面的分组,要求使用这个名字的分组和前面同名分组中的内容匹配的必须一致

pattern = '<(?P<tab>\w+)>(\w+)</(?P=tab)>'
ret = re.search(pattern,s)
print(ret

猜你喜欢

转载自www.cnblogs.com/xiaobai686/p/11681958.html