目录
一、正则表达式
1、概念
正则表达式是一个特殊的字符序列,通常被用来检索、替换那些符合某个模式(规则)的文本;
在python中需要通过正则表达式对字符串进行匹配的时候,可以使用re模块实现全部的正则表达式功能;
2、特点
灵活性、逻辑性和功能性非常强
可以迅速地用极其简单的方式达到字符串的复杂控制
对于刚接触的人来说,比较晦涩难懂
二、查找相关方法
1.match和search:
共同点:1.只对字符串查询一次 2.返回值类型都是re.Match类型的对象
不同点:match是从头开始匹配,一旦匹配失败,就返回None;
search是在整个字符串里匹配
2.finditer:查找到所有的匹配数据放到一个可迭代对象里
3.findall:查找到所有的匹配数据放到一个列表里
4.fullmatch:完整匹配,字符串需要完全满足正则规则才会有结果,否则就是None
import re
from collections import Iterable
# match和search
m1 = re.match(r'hello', 'hello world')
print(m1)
m2 = re.match(r'good', 'hello, good morning') # match是从头开始匹配,一旦匹配失败,就返回None
print(m2) # None
s1 = re.search(r'good', 'hello, good morning')
print(s1)
s2 = re.search(r'Hello', 'hello, good morning') # search在整个字符串查找,找不到返回None
print(s2) # None
# finditer 返回的结果是一个可迭代对象
# 可迭代对象里的数据是匹配到的所有结果,是一个re.Match类型的对象
f1 = re.finditer(r'x', 'sdfdfkxsdjfsdxslxljfdx')
print(f1)
print(isinstance(f1, Iterable)) # True
for f in f1:
print(f)
# findall 返回的结果为满足规则的数据组成的列表
fa = re.findall(r'x', 'sdfdfkxsdjfsdxslxljfdx')
print(fa)
三、re.Match类的使用
当我们调用re.match、re.search或者对re.finditer方法的结果进行迭代时,拿到的数据类型都是re.Match对象
1.span() 匹配到的结果字符串的开始和结束下标((3, 12)包括3不包括12
2.group() 表示正则表达式的分组
(1)在正则表达式里使用()表示一个分组
(2)如果没有分组,默认只有一组,就是把整个正则表达式当做一个整体
(3)分组的下标从0开始
3.groups() 将得到的分组组成一个元组
4.groupdict() 获取到分组组成的字典,使用(?P<name>正则表达式) 可以给分组起名字
import re
m = re.search(r'm.*a', 'osdmsdh23nda')
# print(m) # <re.Match object; span=(3, 12), match='msdh23nda'>
# print(dir(m)) # 查看对象的属性和方法
print(m.span()) # 匹配到的结果字符串的开始和结束下标((3, 12)包括3不包括12
# 获取匹配的字符串结果
print(m.group()) # 默认拿第0组,就是把整个正则表达式当做一个整体 msdh23nda
print(m.group(0)) # msdh23nda
# print(m.group(1)) # IndexError: no such group
# 四个分组的正则表达式
m1 = re.search(r'(0.*)(2.*)(3.*)