re模块

re模块的常用方法

findall:找到字符串中所有符合条件的值装到一个列表中返回

ret = re.findall("\d+","23i43llfmdklfil3232")
print(ret)  

  

search:返回符合条件的第一个值

ret = re.search('\d+',"mfkdmfksml23290ioemdm44")
print(ret.group())

  

match:从字符串的开头开始寻找如果找到则返回值,第一个值不符合条件则报错

ret = re.match('\d+',"1mfkdmfksml23290ioemdm44")
print(ret.group()) 

  

sub:把后面字符串中符合条件的值修改为S #输出SSSSSSSSSSSS

ret = re.sub("\w","S","sssfdnkjnsnjd")
print(ret) 

  

subn:把后面字符串中符合条件的值修改为H,并返回元组,显示修改次数 #输出('mdlkasHkjhHkhkH', 3)

ret = re.subn("\d+","H","mdlkas8798792kjh2khk32")
print(ret)

  

split:把后面的字符串用符合条件的值切割,返回切割完的列表 #输出['dakjdk', 'jj', 'hj', 'h', '']

ret = re.split("\d+","dakjdk778832jj2hj3h2")#如果给正则表达式加上括号,将全部数据返回
print(ret)  
ret.remove("")
print(ret)  #去掉列表中的空字符串

compile:用来编码正则表达式,以节省时间,

节省时间 : 只有在多次使用某一个相同的正则表达式的时候,这个compile才会帮助我们提高程序的效率
r = re.compile("\d+(\.\d+)?")
ret = r.search("djadjnand2.3a3.4")
print(ret.group())

finditer:节省空间效率,节省内存

ret = re.finditer('\d','sjkhkdy982ufejwsh02yu93jfpwcmc')
for r in ret:
    print(r.group())

  

 

分组练习

优先级

import re
#?:表示取消优先级,先找到字符串中的整数与小数,然后优先显示整数
ret = re.findall("\d*(?:\.\d+)|(\d+)","1-2*(60+(-40.35/5)-(-4*3))")
print(ret) #['1', '2', '60', '', '5', '4', '3']

ret = re.findall(">(\w+)<","<a>wahaha</a>")
print(ret)   #优先显示括号里的   输出['wahaha']  括号里加?:   输出['>wahaha<']
ret = re.findall("<(/?\w+)>","<a>wahaha</a>")
print(ret)   #输出['a', '/a'],括号里加?:  输出['<a>', '</a>']

ret = re.search(r'<(\w+)>(\w+)</(\w+)>',r'<a>wahaha</b>')
print(ret.group())
print(ret.group(1))  #显示第一个括号中内容
print(ret.group(2))   #显示第二个括号中的内容

  

 

 

分组命名

第一种方法

ret = re.search("<(?P<name>\w+)>\w+</(?P=name)>","<h1>hello</h1>")  #?P<name> =  给这个位置的字符串起个名字,后面的必须等于前面这个名字
print(ret.group("name"))  #结果 :h1
print(ret.group())  #结果 :<h1>hello</h1>
第二种方法
ret = re.search(r"<(\w+)>\w+</\1>","<h1>hello</h1>") #用\1命名,前面不用起名字,后面直接写\1
print(ret.group(1))
# print(ret.group())  #结果 :<h1>hello</h1>  

  

  

posted on 2018-08-07 16:11  你们都厉害  阅读(118)  评论(0编辑  收藏  举报