正则表达式(re模块)

Posted finance-it-gao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式(re模块)相关的知识,希望对你有一定的参考价值。

s=hello world
print(s.find(llo))         #找到llo
ret=s.replace(ll,xx)     #用xx代替ll
print(ret)
print(s.split(o))          #用o分割字符串
通过以上例子可以看出,字符串提供的方法是完全匹配
正则表达式可以用来匹配字符串,可以进行模糊匹配,增加了灵活度
import re
ret=re.findall(ww{2}l,hello world) #找到w开头,l结尾,中间两个字符任意的字符串
print(ret)                              #findall找到所有满足条件的结果

一、元字符:(. ^ $ * + ? {} [] | () )

1.通配符:.

ret=re.findall(w..l,hello world)   # .可以代表所有字符(除换行符外),一个点匹配一位
print(ret)                             #找到w开头,l结尾,中间两个字符任意的字符串

2.尖角符:^ 只从开头匹配

ret=re.findall(^h...o,jiibhelloko)
print(ret)

3.dollor符:$ 只从结尾匹配

ret=re.findall(h...o$,jiibhelhioko)
print(ret)

4.星号:* 重复前面的字符(0到多次),可以重复普通字符,也可以重复元字符

ret=re.findall(a*,jiibaaaaoko)   #重复a 0到多次
print(ret)
ret=re.findall(a.*li,kiidalexkuulicvyf)  #重复点 0到多次
print(ret)

5.加号:+ 重复前面的字符(1到多次),与*类似

ret=re.findall(a+b,jabgagbhiaaaaboko)       #重复a 1到多次
print(ret)

6.问号:? 重复前面的字符(0次或1次)

ret=re.findall(a?ko,jahkoaaaaokojiako)
print(ret)      #因为a重复0次或1次,所以此处代表找到ko或ako

7.大括号:{} 重复前面的字符(自定义次数)

ret=re.findall(a{4}hu,huaaaahuffg)       #重复a 4次
print(ret)
ret=re.findall(a{1,3}hu,ahudaaahufaahufg)       #重复a 1到3次
print(ret)

8.字符集:[] 取消元字符的特殊功能( ^ - 除外)

ret=re.findall(a[chd]x,a,xadcadx)   #匹配三个中任意一个字符,c、h、d都可以
print(ret)
ret=re.findall(a[a-z]x,amxadcakx)       #匹配a-z的任意一个字符
print(ret)
ret=re.findall(w[,d*]l,w,,lewkljiw*lwdddl)    #匹配逗号/星号/d,此处*不再是对d的重复
print(ret)
ret=re.findall(w[^t,h],wtwfwgwtwhwjfgtw,hu)   #中括号里,上尖号代表取反
print(ret)                                        #此处匹配除t和h以外的其他字符

9.反斜杠:

(I)反斜杠后边跟普通字符实现特殊功能:

(1) d 匹配0-9的十进制数,相当于[0-9]

print(re.findall(d{11},fi159485526448521))    #找到一个电话号码

(2) D 匹配任何非数字字符,相当于[^0-9]

print(re.findall(D{4},fi159JIHGB6448521))

(3) s 匹配任何空白字符

print(re.findall(sad,fiad94 ad1))

(4) S 匹配任何非空白字符

print(re.findall(Sad,fiad94 ad1))

(5) w 匹配任何字母/数字字符,相当于[a-zA-Z0-9]

print(re.findall(wad,fiad94 ad1K54ad))

(6) W 匹配任何非字母/数字字符,相当于[^a-zA-Z0-9]

print(re.findall(Wad,fiad94 ad1K5.ad))

(7)  匹配一个特殊字符

print(re.findall(rI,I a.Im a LIST))     #找出前面带特殊字符的I
print(re.findall(rI,I am a LISTI.P))    #找出后面带特殊字符的I

(II)反斜杠后边跟特殊字符取消特殊功能:

ret = re.search(sb,hducbsbiudhsb)          #search只找到一个满足条件的结果
print(ret)
print(ret.group())
ret=re.search(a.,asda.dd).group()    #反斜杠使通配符失去意义,此处就代表字符 .
print(ret)
ret=re.search(a+,aaasa+d).group()    #反斜杠使加号失去特殊意义,此处就代表字符 +
print(ret)

(III)有时前面加‘r‘的原因及如何匹配反斜杠

re是一门独立的编程语言,pythdon的两个\匹配re中的一个,re是用前面的两个\匹配后面的一个(后面的一个顶两)
所以前面不加‘r‘时,是从python开始解释,4个匹配后面的一个;加‘r‘时,是从re开始解释,两个即可匹配后面的一个
ret=re.findall(\\,afefc)
print(ret)
ret=re.findall(r\,afefc)
print(ret)
ret=re.findall(blow,blow)         #不加r,从python开始解释,在python中也是特殊字符,匹配不到blow
print(ret)
ret=re.findall(rblow,blow)        #加r,从re开始解释,才能代表re中的特殊字符
print(ret)

10.小括号:() 打包

print(re.search((as)+,dfasdasasjha).group())  #as作为一个整体

11.竖杠:| 代表或者

print(re.findall(a|3,dfsds3k4))
print(re.findall(a|3,dfsads3k4))

二、正则表达式例子

import re
ret=re.search((?P<id>d{3})/(?P<name>w{3}),wdwds456/l5ffff)    #(?P<>是一个固定格式,给匹配的内容起名字)
print(ret.group())                  #打印整体
print(ret.group(id))              #通过名字打印部分
print(ret.group(name))

三、正则表达式的方法

1.findall(): 所有满足条件的结果都返回到一个列表里
2.search() : 返回匹配到的第一个对象,该对象可以调用group()查看结果
3.match(): 只在字符串开头匹配
ret=re.match(asd,asddfasd)
print(ret)
print(ret.group()) #返回匹配到的第一个对象,该对象可以调用group()查看结果
4.split() 分割
ret=re.split([j,s],hzkjfsh,hg)    #先用j分,再用逗号分,再用s分
print(ret)
ret=re.split([jh],hzkjfsog)    #先用j分出‘hzk‘和‘fsog‘,再用h分它两。边界上会分出空字符
print(ret)
5.sub() 替换
ret=re.sub(a..x,skohhb,fdalexji)
print(ret)
6.compile()
ret=re.findall(.com,syeu.comjiijh)
print(ret)
obj=re.compile(.com)           #匹配规则被编译成一个对象
ret=obj.findall(syeu.comjiijh)  #直接用这个对象调用功能,只写字符串就行,不用再写匹配规则。
print(ret)                        #当多次用到这样的匹配规则时,此法可以起到简化、省时作用

 

 
 
 
 

以上是关于正则表达式(re模块)的主要内容,如果未能解决你的问题,请参考以下文章

第43天python学习re模块学习

常用模块-正则re

python成长之路第三篇_正则表达式

python成长之路第三篇_正则表达式

python知识-正则表达式re模块

正则表达式