小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
本文已参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金。
复习回顾
我们上期在正则表达式的语法了解正则表达式发展历史,Perl 是一种擅长处理文本的语言,众多语言如Python、Java、C#等设计也都是采用perl原则
对正则表达语法进行学习,知道了特殊字符分为预定字符、特殊字符、合法字符、位置字符等
同时也对正则引擎两大类型DFA和NFA工作机制进行学习和掌握。
- DFA:采用文本导向,也叫文本导向引擎
- NFA:采用字符回溯,也叫正则导向引擎
本期,我们将学习Python re 模块提供的常用以及如何编译正则表达式对象,Let's go~
1. re模块概述
随着正则表达式越来越普遍,Python 内置库 re 模块也支持对正则表达式使用
Python 提供了re模块可以支持正则表示表达式使用,re模块提供了9个常量、12个函数
具体如下图所示:
-
使用方法:
re 模块是 Python 内置库,我们只需要
import re就可以正常使用 -
re 模块对象组成:
-
正则对象:用于执行正则表达式相关操作的实体
-
匹配对象:用于存放正则表达式匹配的结果并提供用于获取相关匹配结果的方法
-
2. re模块常量
| 常量名 | 简称 | 值 | 作用 |
|---|---|---|---|
| ASCII | res.ASCII=res.A | 256 | 使\w, \W, \b, \B, \d, \D, \s 和 \S 只匹配ASCII码 |
| IGNORECASE | res.IGNORECASE=res.I | 2 | 忽略大小写 |
| LOCALE | res.LOCALE=res.L | 4 | 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定 |
| UNICODE | res.UNICODE=res.U | 32 | 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性 |
| MULTLINE | res.MULTLINE=res.M | 8 | 多行模式,改变'^'和'$'的行为 |
| DOTALL | res.DOTALL=res.S | 16 | 点任意匹配模式,改变'.'的行为 |
| VERBOSE | res.VERBOSE=res.X | 64 | 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释 |
| TEMPLATE | res.TEMPLATE=res.T | 1 | |
| DEBUG | - | 12 | 显示编译时的debug信息,没有内联标记 |
3. re模块编译方法
python 内置库re 模块提供 compile()方法来对正则表达式字符串进行编译
re.compile(strPattern[, flag]):
-
strPattern 参数
- 这个方法是Pattern类的工厂方法,用于将字符串形式的正则表达式编译为Pattern对象。
- 对正则表达式进行编译后,会被提前缓存,重复使用提高效率
-
flag参数
-
该参数指定匹配模式,取值可以使用按位或运算符'|'表示同时生效,比如re.I | re.M。
-
可以在regex字符串中指定模式,比如re.compile('pattern', re.I | re.M)与re.compile('(?im)pattern')是等价的。
-
flag可选值有:
- re.I(re.IGNORECASE)
- M(MULTILINE)
- S(DOTALL)
- L(LOCALE)
- U(UNICODE)
- X(VERBOSE)
🌟 重点说明:
re.compile()对正则表达式进行编译成正则对象后,该对象可以通过match()、search()来进行匹配。
p = re.compile("正则表达式")
m = p.match("检查内容")
等价于
m = re.match("正则表达式","检查内容")
re.complie()会对正则表达提前缓存,提高正则表达式重复使用效率
4. re 模块步骤
re 模块进行使用正则表达式进行内容匹配:
- 编写 Python 正则表达式字符串s
- 使用 re.compile()对正则表达式进行编译成正则对象Pattern p
- 正则对象p调用p.match()或者p.fullmatch()函数得到匹配对象Match m
- 通过匹配对象m内容进行判断,匹配是否成功
import re
s = "正则表达式"
p = re.compile(s)
m = p.match("检测的文本")
if m:
print(m.group())
re 模块使用正则表达式进行内容查找、替换等操作
- 编写 Python 正则表达式字符串s
- 使用 re.compile()对正则表达式进行编译成正则对象Pattern p
- 正则对象p 调用 p.search()或p.findall()或p.finditer()对内容进行查找
- 正则对象p 调用p.sub()或p.subn()对内容进行替换
- 正则对象p 调用p.split()对内容进行分割
import re
s = "正则表达式"
p = re.compile(s)
# 查找
mf1 = p.search("检测内容")
mf2 = p.findall("检测内容")
mf3 = p.finditer("检测内容")
# 替换
ms = p.sub("检测内容")
ms2 = p.subn("检测内容")
# 分割
mp = p.split("检测内容")
5. 小试牛刀
import re
s = "Jue"
p = re.compile(s)
# search()扫描整体字符串,之后匹配
m = p.search("hello Jue jin")
# match()从字符串开始位置进行匹配
# m = p.match("hello Jue Jin")
if m:
print(m.group())
总结
本期,我们学习在 Python 对正则表达式支持的内置模块,re 模块相关的方法整体了解。
重点学习了对正则表达式编译re.compile()方法,以及9个匹配模式相关含义,可以通过位运算或|来指定多个匹配模式。
以上是本期内容,我们下期见~