re模块

 

#一、元字符
# .(通配符)能够匹配除了\n 即换行符之外的所有字符
res1 = re.findall('w..l','hello w\nld')
print(res1) #输出结果为空

#^表示起始位置开始匹配
res2 = re.findall('^h...o', 'hdjffhellojkj')
print(res2)#无法匹配到

#$表示在结尾位置匹配
res3 = re.findall('w...d','hello world')
print(res3)

#*表示重复匹配,零个或者多个
res4 = re.findall('w.*','hello world')
print(res4)
res5 = re.findall('ab*','fjsfhjsdaklk')
print(res5)#匹配大结果是a
res6 = re.findall('a*','bcdef')
print(res6)#['', '', '', '', '', '']这里由于没有匹配到所以就全部是空

# + 表示一个或者多个
res7 = re.findall('a+b','aaaaabdfjkdajjbabkk')
print(res7) #['aaaaab', 'ab']

# ?表示零个或者一个
res8 = re.findall('a?b','aaaaabdfjkdajjbabkk')
print(res8) #['ab', 'b', 'ab']

#{x}表示匹配x次
#{m,n}表示匹配m-n次,但是如果都满足的时候就选最多的匹配(贪婪匹配)
res9 = re.findall('a{2}b','aaaaabdfjkdaabjjbabkk')
print(res9) #['aab', 'aab']
res10 = re.findall('a{1,5}b','aaaaabdfjkdaabjjbabkk')
print(res10)#['aaaaab', 'aab', 'ab']

#总结:*等价于{0,无穷次}, +等价于{1,无穷次},?等价于{0,1},{1,}等价于{1,无穷次}

#[] 字符集 里边的逗号表示或匹配
res11 = re.findall('a[b,c]d','abd')
print(res11) #['abd']
res11 = re.findall('a[b,c]d','acd')
print(res11)#['acd']
res11 = re.findall('a[b ,c]d','abd')
print(res11)#['abd']后边的空格被过滤掉了
res11 = re.findall('a[b,c, ]d','a d')
print(res11)#['a d']这里可以匹配到空格

#[]字符集里边 \ - ^ 元字符功能取消掉

# - 在[]内表示一个范围内
res12 = re.findall('[a-z,1-9,A-Z]','dsfas3242893UJKJ')
print(res12) #['d', 's', 'f', 'a', 's', '3', '2', '4', '2', '8', '9', '3', 'U', 'J', 'K', 'J']

# ^在[]内表示取非的意思
res13 = re.findall('[^7]','uij87erk')
print(res13)#['u', 'i', 'j', '8', 'e', 'r', 'k']除了7之外的所有的字符
res14 = re.findall('[^7,8]','jkj827273kj')
print(res14)#['j', 'k', 'j', '2', '2', '3', 'k', 'j']除了7,8之外的所有的字符
res15 = re.findall('[^ab]','shsjabkjakb')
print(res15)#['s', 'h', 's', 'j', 'k', 'j', 'k']除了a,b这类字符外的所有的字符

# \
#1、能够将含有特殊意义的元字符取消特殊意义 \.取消了.的所有字符的含义
#2、能够将不含特殊意义的元字符加上特殊含义
######
# \d 匹配所有的数字 等价于[0-9]
# \D匹配所有的非数字 等价于[^0-9]
# \s匹配任何空白字符 等价于[\t\n\r\f\v]
# \S匹配任何空白字符 等价于[^\t\n\r\f\v]
# \w匹配任何字母数字 等价于[0-9a-zA-Z]
# \W匹配任何非字母数字 等价于[^0-9a-zA-Z]
# \b匹配一个特殊边界 eg:$ # , . 空格等

res16 = re.findall('\d','890-hjhksdf')
print(res16)#['8', '9', '0']
res17 = re.findall('\D','890-hjhksdf')
print(res17)#['-', 'h', 'j', 'h', 'k', 's', 'd', 'f']
res18 = re.findall('\s','890-h  jhksdf')
print(res18)#[' ', ' ']
res19 = re.findall('\S','890-h jhksdf')
print(res19)#['8', '9', '0', '-', 'h', 'j', 'h', 'k', 's', 'd', 'f']
res20 = re.findall('\w','890-hjhksdf#$')
print(res20)#['8', '9', '0', 'h', 'j', 'h', 'k', 's', 'd', 'f']
res21 = re.findall('\W','890-hjhksdf@#')
print(res21)#['-', '@', '#']
res22 = re.findall(r'h\b','890-h$jhksdf')#这里要加原生r是因为\b在python解释器里边是一个特殊字符
print(res22)#['h']

#re.search只返回一个匹配到的值
ret1 =  re.search('ab','dsfsadabflsdkabaa')
print(ret1)
print(ret1.group())

# \加上元字符取消特殊功能 比如 \.表示. \+表示+ \\表示\
ret2 = re.search('a\.','fkdsa.kl')
print(ret2.group()) #a.
ret3 = re.search('a\+b','a+b')
print(ret3.group())#a+b

# \\
ret4 = re.search('\\\\j','sdf\jfdsfs')#这里传入四个\是因为,代码传给python解释器的时候需要一个\\表示一个\,而正则里边也需要\\表示一个\,所以这个在python解释器里边是\\然后再变成正则的\
print(ret4.group())#\j
ret5 = re.search(r'\\j','dfsf\jk')
print(ret5.group())#\j

#()表示分组
ret6 = re.search('(ab)(cd)*','abjk')
print(ret6.group())#ab

#这里的(?P<id>)是固定的用法,用作起名字,这里的还是做为一个整体来匹配,只是匹配后的结果值可以用名称来取值
ret7 = re.search('(?P<id>\d{3})/(?P<name>\w{5})','sdfs880/ksdjfksd')
print(ret7)
print(ret7.group())
print(ret7.group('id'))
print(ret7.group('name'))
#二、正则表达式的方法
#1、re.findall() 返回所有的内容保存到列表中
res21 = re.findall('ab','ahkshkfabjkjab')
print(res21)#['ab', 'ab']
#2、re.search  返回第一个匹配到第一个对象object,通过group返回获取返回值
res22 = re.search('ab','ahkshkfabjkjab')
print(res22.group())#ab
#3、re.match只在字符串的开始位置进行匹配,返回的是一个对象object,通过group返回获取返回值
res23 = re.match('ah','ahkshkfahjkjab')#ah
print(res23.group())
#4、re.split()按照前边的元字符进行匹配分割,先按照a进行分割后,再将得到的字符按照b进行分割,a前边没有字符所以会得到一个空格,直接返回列表
res24 = re.split('[a,h]','asjajiohako')
print(res24)#['', 'sj', 'jio', '', 'ko']
#5、re.sub()按照正则式进行替换,返回替换后的值
res25 = re.sub('w...d','jiangqijun','hello world')
print(res25)#hello jiangqijun
#6、re.compile()将正则式编译为模型,然后每次直接调用
model = re.compile('\.com')
print(model.findall('www.zaful.com'))#['.com']
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值