re模块
re模块是python内置的匹配模块,利用正则表达式可以很好的匹配到相关的信息
findall的功能
improt re
ret = re.findall('\d+', 'dasfr123213fdsafdsa2312') #\d+是正则表达式,后面是需要匹配的数据
print(ret,type(ret))
ret = re.findall('\s+', 'dasfr123213fdsafdsa2312')
print(ret)
结果是
['123213', '2312']
[]
匹配的到时有数据,没有数据,列表为空
search的功能
ret2 = re.search('\d+', 'dasfr123213fdsafdsa2312') #search返回的是一个类的空间
print(ret2,type(ret2))
print(ret2.group()) #通过group()来获取第一个值
ret2 = re.search('\s+', 'dasfr123213fdsafdsa2312')
print(ret2,type(ret2)) #有值返回一个类的空间,没有值,返回None
print(ret2.group()) # 没有值,获取报错
结果是
123213
None
报错
math的功能
math和search调用的是一样的功能,math在匹配的时候前面带有一个'^'
ret3 = re.match('\d+', 'dasfr123213fdsafdsa2312')
print(ret3,type(ret3))
ret3 = re.match('\d+', '123213fdsafdsa2312')
print(ret3,type(ret3))
print(ret3.group())
结果是
None
123213
sub和subn替换模块
import re
ret = re.sub('\d', 'H', 'every3every4every4',1) #sub的带有四个参数,第一个正则表达式,第二个替换成的数据,第三个需要替换的数据,第四个是替换的次数
print(ret)
ret1 = re.subn('\d', 'H', 'every3every4every4') #sub的带有三个参数,参数都是一个意思,返回的时候会返回匹配的次数
print(ret1)
结果是
evaHegon4yuan4
('everyHeveryHeveryH', 3)
split切割
import re
ret = re.split('\d+','er12|213e|r231')
结果是
['er', '|', 'e|r', '']
compile预编译
简单的说就是把正则封装了
import re
ret=re.compile('-0\.\d+|-[1-9]\d+(\.\d+)?') #匹配负数
r=ret.search('sdfa-12 fdads-20')
print(r.group())
结果是
-12
finditer节省空间
import re
ret=re.finditer('\d','sjkhkdy982ufejwsh02yu93jfpwcmc')#返回一个生成器
for i in ret:
print(i.group())
结果是
9
8
2
0
2
9
3
findall的优先级
import re
ret = re.findall('www.(baidu|oldboy).com', 'www.oldboy.com')
print(ret) #因为findall会匹配结果组,优先返回结果,所有直接返回oldboy
结果是
['oldboy']
ret = re.findall('www.(?:baidu|oldboy).com', 'www.oldboy.com')
print(ret)
结果是
['www.oldboy.com']
split的优先级
import re
ret=re.split("\d+","every5one9is")
print(ret)
结果是
['every', 'one', 'is']
ret=re.split("(\d+)","every5one9is")
print(ret)
结果是
['every', '5', 'one', '9', 'is']
#在匹配部分加上()之后所切出的结果是不同的,
#没有()的没有保留所匹配的项,但是有()的却能够保留了匹配的项,
#这个在某些需要保留匹配部分的使用过程是非常重要的。