python的re模块-- 第十讲

# --author--=Michal
# date=2019/8/22

import re
#######################
# 普通匹配
#######################
findall = re.findall('ab', 'abc') #['ab']
findall = re.findall('a[bc]d', 'abcd') #[] bc任选其一
# print(findall)

#######################
# # 字符集[],字符集里面是或的关系,并且里面可以消除一切格式
#######################
re_findall = re.findall('[ab]', 'abcd') #['a', 'b']
re_findall = re.findall('[^ab]', 'abcd') #['c', 'd']除了ab之外的
re_findall = re.findall('[a-z]+', 'abcd') #['abcd']范围
re_findall = re.findall('\w+', 'abcd') #['abcd']\w匹配数字与字母
re_findall = re.findall('[.*+\\\]+', '4.*\+') #['.*/+']
# print(re_findall)

#######################
#  元字符之转义符\
#######################
# 反斜杠后面跟元字符,去除元字符的特殊含义\. 点本来匹配一个字
# 反斜杠后面跟普通字母实现特殊功能

l = re.findall('\d+', 'ad34dc') # /d获取所有数字
l = re.findall('\D+', 'ad34dc') # /D排除所有数字
l = re.findall('\s+', 'ad34 dc') # /s匹配任何空白字符 [' ']
l = re.findall('\S+', 'ad34 dc') # /S匹配任何非空白字符 ['ad34', 'dc']
l = re.findall('\w+', 'ad34 dc') # /w匹配所有数字跟字母 ['ad34', 'dc']
l = re.findall('\W+', 'ad34 dc') # /W匹配所有非数字跟字母 [' ']
l = re.findall('\b+', 'ad34#dc') # /b匹配一个特殊字符边界,比如空格、&、#等
# print(l)

#######################
#  元字符之分组() 组的优先级最高,会优先返回
#######################
# all1 = re.findall('(?P<name>\d{2})','yy457cd') # ?P<>固定写法,name是名字,匹配规则是后面的取两个数字
ret = re.findall('www.(\w+).com','www.baidu.com') #['baidu']
# print(ret)

#######################
#  正则中的替换 sub
#######################
sub = re.sub('\d', 'ac', 'AB12C') # ABacacC
print(sub)



#######################################
第二阶段学习总结
#######################################
# findall匹配所有,并且匹配不上返回空[],math匹配一个返回,search只匹配第一个就返回,并且没有匹配上返回的是None
print("*的使用:",re.findall("患者姓名*","一份病历中的患者姓和患者姓名")) #匹配*前面字符0个或多个,贪婪模式
print("+的使用:",re.findall("患者姓名+","一份病历中的患者姓名名和患者姓")) #匹配+前面字符1个或多个,贪婪模式
print("?的使用:",re.findall("患者姓名?","一份病历中的患者姓名名和患者姓")) #匹配?前面字符0个或1次
print("{}的使用:",re.findall("患者姓名{0,}","一份病历中的患者姓名名和患者姓")) #匹配{}前面字符0个或多次,{}中写具体数字就是只配置{}前面字符几次的
print("[]的使用:",re.findall("[患者姓名]","一份病者历中的患姓名者名和患姓")) #[]里面的字符是或的关系,只要有一个字符就找出一个字符
print("[^]的使用:",re.findall("[^患者姓名]","一份病者历中的患姓名者名和患姓")) #[]里面加^是取非,只要不包含这里面任何一个字就可以
print("\d的使用:",re.findall("\d","一份病者1历中的患2姓名者名和患姓")) #\d取出 0-9之间的任意数字
print("\D的使用:",re.findall("\D","一份病者1历中的患2姓名者名和患姓")) #\D排除 0-9之间的任意数字
print("\s的使用:",re.findall("\s","一份病者1历中的患2姓名者名 和患姓")) #\s匹配任何空白字符 它相当于类[\t\n\r\f\v] \t table \n是换行 \r回车 \f换页 \v垂直制表符
print("\S的使用:",re.findall("\S","一份病者1历中的患2 姓名者名和患姓")) #\S是\s的反,除了空白都匹配出来
print("\w的使用:",re.findall("\w","一份病者1历_-中的患2 姓名者名和患姓")) #\w 匹配包括下划线在内任何字母数字字符,也能匹配汉字
print("\W的使用:",re.findall("\W","一份病者1历_-中的患2 姓名者名和患姓")) #\W 匹配除去包括下划线在内任何字母数字字符,也能匹配汉字
print("()的使用:",re.findall("(姓名\d)","一份病者1历_-中的患2 姓名1者名和患姓")) #()分组,匿名分组,()里面的是浑然一体,是一个字符串,不像[]里面是或的关系
print("字符()的使用:",re.findall("姓名(\d)","5一份病者1历_-中的患2 姓名12者姓名3患姓")) #字符(),如果用findall结果跟search不一样,findall里面有组,只返回组里面的内容
print("(?P<name>)的使用:",re.search("(?P<id>\d)","5一份病者1历_-中的患2 姓名12者姓名3患姓").group("id")) #有名分组
print("search的使用:",re.search("姓名(\d)","一份病者1历_-中的患2 姓名12者姓名3患姓").group()) #姓名跟()里面的数字是浑然一体,只能这样匹配,并匹配1个
print("match的使用:",re.match("姓名(\d)","姓名2一份病者1历_-中的患2 姓名12者姓名3患姓").group()) #math匹配开头是这个规则的字符,并匹配1个
print("r的使用:",re.search("姓名\d",r"一份病者1历_-中的患2 姓名1\d者名和患姓").group()) # 字符串里面包含\d \w 等正则特殊字符,这时候前面加r,就让字符串中的\d等失去特殊含义
print("split的使用:",re.split("\d","一份病者1历_-中的患2 姓名1\d者名和患姓",1)) #按照正则规则进行切割,返回一个[]
print("sub的使用:",re.sub("\d","&","一份病者1历_-中的患2 姓名1\d者名和患姓",1)) #相当于update
print("sub的使用:",re.sub("\d","&","一份病者1历_-中的患2 姓名1\d者名和患姓",1)) #相当于update
print("subn的使用:",re.subn("\d","&","一份病者1历_-中的患2 姓名1\d者名和患姓")) #相当于update,有返回():返回替换的个数
print("compile的使用:",re.compile("\d").search("一份病者9历_-中的患2 姓名1\d者名和患姓").group())
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值