写在前面:正则表达式,可以理解为一种规则或者参照对象,就是一种模板,就像别人家的孩子一样,你得和它(正则表达式)一样。正则表达式的使用非常广泛,例如,对于用户输入密码的下划线,字母,数字的判断。下面正式开始
1、re库的引入
import re
(1)re库主要函数
re.search() 在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
re.match() 从一个字符串的开始位置起匹配正则表达式,返回match对象
re.findall() 搜索字符串,以列表类型返回全部能匹配的字符
re.spilt() 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
re.finditer() 搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
re.sub() 在一个字符串中替换匹配所有匹配正则表达式的子串,返回替换后的字符串
在这里,我们主要对其中的search()、findall()、sub()进行说明
2、上述三种函数说明
(1)search函数
a、有模式对象
利用search方法进行对比查找
创建模式对象
pat = re.compile("AA") #此处的AA,是正则表达式,用来验证其他的字符串
m = pat.search("CBA") #search字符串:被校验的内容
print(m)
运行结果
D:\program\python\python\python.exe D:/program/python/douban/test/testre.py
None
进程已结束,退出代码0
我们看到,返回的结果是none,是因为在被校验的字符串中没有模式对象“AA”,所以返回none
这次我们给一个包含“AA”的
pat = re.compile("AA")
m = pat.search("CBACAA")
print(m)
结果
D:\program\python\python\python.exe D:/program/python/douban/test/testre.py
<re.Match object; span=(4, 6), match='AA'>
进程已结束,退出代码0
可以看到返回结果,注意这个区间(4,6),python中的区间通常都是左闭右开,所以这个区间表示的是第四第五,也就是我们被参照字符串的第四第五
再举一个例子
pat = re.compile("AA")
m = pat.search("AABCCNADFJAAAA") #利用search方法进行对比查找
print(m)
运行结果
D:\program\python\python\python.exe D:/program/python/douban/test/testre.py
<re.Match object; span=(0, 2), match='AA'>
进程已结束,退出代码0
返回的结果是(0,2),这是前面的两个“AA”,后面的四个"AAAA"是没有被匹配进去的,因为它是不符合条件的
b、无模式对象
m = re.search("asd","Aasd") #前面的字符串是规则(模板),后面的字符串是被校验的对象
print(m)
结果
D:\program\python\python\python.exe D:/program/python/douban/test/testre.py
<re.Match object; span=(1, 4), match='asd'>
进程已结束,退出代码0
(2)、下面我们用findall()函数,以列表的形式返回所有能匹配到的字符串
print(re.findall("[A-Z]","asdsADFAVSDAa"))
print(re.findall("[A-Z]+","asdsADFAVSDAa")) #前面字符串是规则(正则表达式),后面表达式是被校验的字符串
结果
D:\program\python\python\python.exe D:/program/python/douban/test/testre.py
['A', 'D', 'F', 'A', 'V', 'S', 'D', 'A']
['ADFAVSDA']
进程已结束,退出代码0
第一行代码以列表形式返回了所有的大写字母
第二行代码返回的是连续的大写
两者的区别在于【A-Z】后面有无“+”号,如果有,则打印全部的字符串连续输出,反之,则以列表间隔输出
(3)、sub()函数,主要起到替换、分隔的作用
print(re.sub("a","A","asdsa")) #找到a用A替换,在第三个字符串中查找,其实就是在第三个字符串中把所有的“a”换成“A”
结果
D:\program\python\python\python.exe D:/program/python/douban/test/testre.py
abd-'
进程已结束,退出代码0
D:\program\python\python\python.exe D:/program/python/douban/test/testre.py
AsdsA
进程已结束,退出代码0
最后,来个小tip|
在键盘上打印字符串的时候,难免会遇到这样一个问题,打字时你打印的 "\"后面会接着一个字符什么的,从而连起来,变成转义字符,造成识别不出来等问题,有一个很好的解决办法,在前面加一个“r”
使用前
---------------------------------------------------------------------------------------------------------------------------------
a = "\aabd-\'"
print(a)
D:\program\python\python\python.exe D:/program/python/douban/test/testre.py
abd-'
进程已结束,退出代码0
---------------------------------------------------------------------------------------------------------------------------------
使用后
---------------------------------------------------------------------------------------------------------------------------------
a =r"\aabd-\'"
print(a)
D:\program\python\python\python.exe D:/program/python/douban/test/testre.py
\aabd-\'
进程已结束,退出代码0
--------------------------------------------------------------------------------------------------------------------------------
完美解决。