文章目录
学习目标
- 能够描述什么是正则表达式
- 能够使用re模块查找指定正则格式的字符串
- 能够说出match,search,findall和finditer方法的区别
- 能够说出re.Match类的常见属性和方法作用
- 能够说出常见的正则修饰符
- 能够说出常见的正则表达模式
- 单字修饰符
- 限定修饰符
- 边界修饰符
- 能够说出贪婪模式和非贪婪模式的区别
- 能使用非贪婪模式进行正则匹配
一、正则表达式的介绍
- 正则表达式是一个特殊的字符序列,计算机科学的一个概念。通常被用来检索、替换哪些符合某个模式(规则)的文本
- 许多程序设计语言都支持利用正则表达式进行字符串操作。在Python中需要通过正则表达式对字符串进行匹配的时候,可以使用 re模块。re模块使用 Python 语言拥有全部的正则表达式功能
- 特点:
- 灵活性、逻辑性和功能性非常强
- 可以迅速地用极简单的方式达到字符串的复杂控制
- 对于刚接触的人来说,比较晦涩难懂
# 用来处理字符串,对字符串进行检索和替换的
# 1. 查找 2. 替换
import re
x = 'hello\\nworld' # hello\nworld
# 在正则表达式里,如果想要匹配一个 \ 需要使用 \\\\
# 第一个参数就是正则匹配规则
# 第二个参数表示需要匹配的字符串
# m = re.search('\\\\', x) # match 和 search
# 还可以在字符串前加入一个 r,\\ 就表示 \
m = re.search(r'\\', x)
# search 和 match 方法的执行结果是一个Match类型的对象
print(m) # <re.Match object;span=(5, 6), match='\\'>
二、正则查找相关的方法
# 查找相关的方法
# match 和 search:
# 共同点:1. 只对字符串查询一次 2. 返回值类型都是 re.Match 类型的对象(没有匹配上则返回None)
# 不同点:match 是从头开始匹配,一旦匹配失败,就会方法返回 None;search是在整个字符串里匹配
查找字符串,返回结果是一个 re.Match 对象
# finditer:查找到所有的匹配数据放到一个可迭代对象里(各数据是 re.Match 对象)
# findall:把查找到的所有的字符串放到一个列表里
# fullmatch:完整匹配,字符串需要完全满足正则规则才会有结果,否则就是None
from connections.adc import Iterable
import re
m1 = re.match(r'good','hello world good morning')
print(m1) # None
m2 = re.search(r'hello','hello world good morning')
print(m2) # <re.Match object;span=(0, 5), match='hello'>
# finditer 返回的结果是一个可迭代对象
# 可迭代对象里的数据是匹配到的所有结果,是一个 re.Match 类型的对象
m3 = re.finditer(r'x','fhquhfnxpkmapixok1i')
print(isinstance(m3, Iterable)) # True
for t in m3:
print(t)
m4 = re.findall(r'x\d+','xqofho1cxhjax123x14')
print(m4) # 以x开头且带数字元素组成的列表
m5 = re.fullmatch(r'hello world', 'hello world')
三、re.Match类
当我们调用 re.match 方法、re.search 方法、或者对 re.finditer 方法的结果进行迭代时,拿到的数据类型都是 re.Match 对象
import re
m = re.search(r'm,'sdafhiwmkom')
# 匹配到的结果字符串的开始和结束下标
print(m.span())
# 使用group方法可以获取匹配的字符串结果
# group 可以传参,表示第 n 个分组
print(m.group()) # m
print(m.group(0)) # m
print(m.group(1)) # IndexError:no such group
# group方法表示正则表达式的分组
# 1. 在正则表达式里使用()表示一个分组
# 2. 如果没有分组,默认只有一组