一、正则表达式的作用
通过一些专用的字符,表达检索、替换等功能。具有简化高效的特点。比如我们使用的一些通配符,如.表示所有,没有限制;\d表示所有数字,而\D表示所有非数字等。只有多使用才能更好的精通正则表达式,毕竟我们使用时能常用到的正则表达式并不多,需要逐步积累。
二、正则表达式的使用
(一)所用到的库
import re,这是一个python自带的库,不需要我们再安装
(二)一些常用函数
1、match:匹配一个字串,其中第一个参数是需要查找的字串,第二个参数是需要查找的库
print(re.match('www', 'www.runoob.com').span()) # 在起始位置匹配,span为跨度
print(re.match('ww.x','www.qxrobot.com')) #只要不是第一个字符就匹配就显示none或错误
print(re.match('www', 'www.runoob.com'))
执行的结果为:
(0, 3)
None
<re.Match object; span=(0, 3), match=‘www’>
这里第三个显示也找到了www的字串
2、search:查找一个字串,格式与上面的match使用方法一样
print(re.search('www', 'www.runoob.com').span()) # 在起始位置匹配,这个与match一样
print(re.search('com', 'www.runoob.com').span()) # 不在起始位置匹配
执行的结果为:
(0, 3)
(11, 14)
这里我们可以看出,search相对来说更实用,能够查找到需要查找的字串的位置。
3、添加正则表达式查找
代码:
pattern = re.compile(r'\d+') # 用于匹配至少一个数字
print(pattern.match('one12twothree34four', 3, 10)) # 从'1'的位置开始匹配,正好匹配
print(pattern.search('one12twothree34four'))
显示的结果:
<re.Match object; span=(3, 5), match=‘12’>
<re.Match object; span=(3, 5), match=‘12’>
这里,re库通过compile函数增加了正则表达式规则,以上两句代码显示的结果一样。
4、sub替换字符
代码:
phone = "18930077671# 这是一个手机号码"
# 删除字符串中的 Python注释
num = re.sub(r'#.*$', "", phone) #替换字符
print("电话号码是: ", num)
显示的结果是:
电话号码是: 18930077671
通过结果,我们发现,通过’’’’,实现的功能和删除结果一样,也就是删除可以视为一种特殊的替换即可.
5、findall与finditer查找字符
代码:
pattern = re.compile(r'\d+') # 查找数字
print(pattern.findall('runoob 123 google 456')) #查找所有数字
print(pattern.findall('run88oob123google456', 0, 10)) #查找一个字串的一部分的全部数字
it = re.finditer(r"\d+", "12a32bc43jf3") #查找数字,与上面的一直
for match in it:
print(match.group())
结果:
[‘123’, ‘456’]
[‘88’, ‘12’]
12
32
43
3
这两种查找方式效果也不错。
6、split分割字符串
第一个参数是分隔符,第二个是需要分割的字符串
print(re.split('\W+', 'runoob, runoob, runoob.'))#分割字符串
print(re.split('o', 'runoob, runoob, runoob.'))#分割字符串
结果:
[‘runoob’, ‘runoob’, ‘runoob’, ‘’]
[‘run’, ‘’, ‘b, run’, ‘’, ‘b, run’, ‘’, ‘b.’]
三、正则表达式的字符
通过以上示例,我们可以看出,查找效果与正则表达式的字符设置有很大关系,下面列一下系统的正则表达式字符,以便以后练习使用。
(一)以下是匹配的修饰符:当需要多个修饰符时,需要 | 来连接。这些修饰符,需要在函数最后添加,如:
re.match( r’(.) are (.?) .*’, line, re.M|re.I)
(二)正则表达式的符号
直接放图啦: