re模块

import re


# 字符串查找
# findall 匹配所有结果
# re.findall('正则表达式','需要匹配的字符串')
ret = re.findall('\d','asdffda23432')
print(ret) # 返回值类型:列表

# search 只匹配第一个结果
ret = re.search('\d+','asdffda23432')
print(ret) # 返回值类型:正则匹配结果的对象或者None 返回个数1 如果匹配成功返回对象,如果没有匹配上返回None
print(ret.group())# 返回 Match 对象 通过group来获取匹配到的结果 如果没有匹配上使用group会报错

# match 匹配开头
ret = re.match('a\d+','a1123asdffda23432')
print(ret.group()) # 返回 Match 对象 需要group取值 如果没有匹配上使用group会报错

# 字符串替换
# sub
# re.sub('正则表达式','新数据','需要匹配的字符串',['替换次数'])
ret = re.sub('\d','','abdsfs3asfde33',1)
print(ret) # 返回替换后的字符串
# subn
# re.subn('正则表达式','新数据','需要匹配的字符串',['替换次数'])
ret = re.subn('\d','','abdsfs3asfde33adfa4')
print(ret) # 返回值:('替换后的字符串',替换了几次)

# 字符串切割
# split
# re.split('正则表达式','字符串')
ret = re.split('\d+','aba123abb45kkk4')
print(ret) # 返回值:列表

# 进阶
# compile
# 因为正则表达式也需要编译,如果我们每次使用finall,search,match都使用一样的正则表达式,每次都需要编译会比较耗时
# 所以我们使用compile提前编译好,来提供给finall,search,match使用,这样正则表达式就只需要编译一次,比较节省时间
ret = re.compile('\d')
res = ret.findall('fasfa1232fdsaf434afds3w') # 相当于 re.findall('\d','fasfa1232fdsaf434afds3w')
print(res)

# finditer
ret = re.finditer('\d','fasfa1232fdsaf434afds3w')
print(ret) # 返回一个迭代器,节省内存 效果相当于findall 迭代器返回 Match 对象 需要group取值
for r in ret:
    print(r.group())


# 分组
ret = re.findall(r'www.(.*?).com','www.baidu.com')
print(ret) # 结果:['baidu']
# 原因:在python中,如果使用了()(分组模式),那么python会默认优先显示分组内的内容
ret = re.findall(r'www.(?:.*?).com','www.baidu.com') # 如果要取消分组内容优先显示,那么需要在分组表达式开始的时候加上?:
print(ret) # 结果:['www.baidu.com']

# 分组命名 命名:?P<name> 使用:?P=name
import re
ret = re.search(r'<(?P<tag_name>\w+)>(\w+)</(?P=tag_name)>','<a>asdfsda</a>')
print(ret.group('tag_name'))

 

posted on 2019-06-17 16:29  信奉上帝的小和尚  阅读(294)  评论(0编辑  收藏  举报

导航