re模块进阶

re模块

三个常用的方法

findall

  • 会匹配到字符串中的所有符合规则的项
  • 并返回一个列表
  • 如果未匹配到返回空列表
import re
ret = re.findall("\d","yang123")
print(ret)
#输出结果
#['1', '2', '3']

import re
ret = re.findall("\d+","yang123")
print(ret)
#输出结果
#['123']

  • 会从头到尾匹配字符创中取出第一个符合条件的项
  • 如果匹配到了,返回一个对象,用group取值
  • 如果没匹配到,返回None,不能用group
import re
ret = re.search("\d+","yang123")
print(ret) #此处输出的是一个对象
print(ret.group())
#输出结果
#123

import re
ret = re.search("\d","yang123")
print(ret) #此处输出的是一个对象
print(ret.group())
#输出结果
#1
#会从头到尾匹配匹配字符串中取出第一个符合条件的项

import re
ret = re.search("^\d","yang123")
print(ret) #如果匹配上返回一个对象,如果不能匹配上返回NONE
print(ret.group())如果是None则报错
#输出结果

match

  • 会从头开始匹配字符串中取出从第一个字符开始是否符合规则
  • 如果符合,就返回对象,用group取值
  • 如果不符合,就返回none
  • match = serch + ^正则
ret = re.match("\d","1yang123")
print(ret)
#输出结果
#1

进阶方法

  • 时间复杂度——效率——compile
    • 在同一正则表达式重复使用多次的时候使用能够减少时间的开销
  • 空间复杂度——内存占用率——finditer
    • 在查询的结果超过1个的情况下,能够有效的节省内存,降低空间复杂度,从而也降低了时间的复杂度
  • 用户体验

finditer

 ret = re.findall("\d","1yang123"*200000000)
 print(ret)#效率低,内存一下子干死

ret = re.finditer("\d","1yang123"*200000000) #迭代器
for i in ret: #迭代出来的每一项都是一个对象
    print(i.group()) #通过group取值即可

compile

  • 是一种编译方法,把正则表达式编译成python能理解的形式,节省重复的时间
  • 在同一正则表达式重复使用多次的时候使用能够减少时间的开销
ret = re.compile("\d+")
print(ret)
r1 = ret.search("ynag123")
print(r1)
r2 = ret.findall("zi456")
print(r2)
r3 = ret.finditer("laing789")
print(r3)


#compile与finditer联用
import re
ret = re.compile("\d+")
r3 = ret.finder("taiban123")
for i in r3:
    print(i.group())
#输出结果
#1
#2
#3

split

import re
ret = re.split("\d","abaiysa12kccgsud21s")#默认只保留分组当中的内容
print(ret)
#输出结果
#['abaiysa', '', 'kccgsud', '', 's']


#保留分组数字
import re
ret = re.split("(\d+)","abaiysa12kccgsud21s")
print(ret)
#输出结果为
#['abaiysa', '12', 'kccgsud', '21', 's']

sub、subn

import re
ret = re.sub("\d","D","agsiaig12kjd") #对其进行替换
print(ret)
#输出结果
#agsiaigDDkjd

ret = re.subn("\d","D","agsiaig12kjd")#可以显示结果和更换次数
print(ret)
#输出结果
#('agsiaigDDkjd', 2)

ret = re.subn("\d","D","agsiaig12kjd",1) #只更换第一处
print(ret)
#输出结果
#('agsiaigD2kjd', 1)
posted @ 2021-06-13 16:35  小杨的冥想课  阅读(45)  评论(0编辑  收藏  举报