引入
正则表达式是匹配字符串的强大工具, 在每个编程语言中都有正则表达式的概念, 利用正则表达式, 我们从返回的页面内容中提取想要的内容就变的比较方便了
1.什么是 re 模块
- re 模块是 Python 内置的模块
2.什么是正则
- 正则表达式是对字符串操作的一种逻辑 (规则), 就是事先定义好一些特定的字符组合, 组成一个"规则字符串", 然后使用这个 "规则字符串" 来对字符串进行过滤
- 在 Python 中通过内置的 re 模块来使用正则表达式, 它提供了所有正则表达式的功能
3.正则表达式的大致匹配过程
- 定义一个"规则字符串", 然后依次与文本中的字符进行对比
- 如果每一个字符都能匹配, 那么就匹配成功, 否则匹配失败
- 如果表达式中有量词或者边界, 这个过程会稍微有一些不同
4.正则小示例
- 比如我们描述四条腿的东西 (规则字符串), 我们可能会想到的有四条腿的动物, 桌子和椅子等等
- 比如我们描述两条腿的东西并且是活的, 我们可能会想到人类, 猴子, 鸟, 袋鼠, 鸡么等等
5.常用正则表达式表
模式 | 描述 |
---|---|
\w | 匹配字母数字及下划线 |
\W | 匹配非字母数字下划线 |
\s | 匹配任意空白字符,等价于[\t,\n,\r,\f] |
\S | 匹配任意非空字符 |
\d | 匹配任意数字,等价于[0-9] |
\D | 匹配任意非数字 |
\A | 匹配以xx字符串开始 |
\Z | 匹配xx字符串结束,如果是存在换行,只匹配到换行前的结束字符串 |
\z | 匹配xx字符串结束 |
\G | 匹配最后匹配完成的位置 |
\n | 匹配一个换行符 |
\t | 匹配一个制表符 |
^ | 匹配字符串的开头 |
$ | 匹配字符串的末尾 |
. | 匹配任意字符, 除了换行符, 当 re.DOTALL 标记被指定时, 则可以匹配包括换行符的任意字符 |
[...] | 用来表示一组字符, 单独列出:[amk] 匹配 'a','m' 或 'k' |
[^...] | 不在 [ ] 中的字符:[^abc] 匹配除了a, b, c之外的字符 |
* | 匹配0个或多个的表达式 |
+ | 匹配1个或多个的表达式 |
? | 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式 |
{n} | 精确匹配n个前面表达式。 |
{n,m} | 匹配n到m次由前面的正则表达式定义的片段,贪婪方式 |
alb | 匹配a或b |
() | 匹配括号内的表达式,也表示一个组 |
ps : [...]
讲解 : [ ]
所有的特殊字符在字符集中都失去其原有的特殊含义,在字符集中如果要使用]
、-
或^
,可以在前面加上反斜杠,或把]
、-
放在第一个字符,把^
放在非第一个字符
更多正则表达式 : https://www.jb51.net/tools/regexsc.htm
一.普通字符和元字符
正则表达式就是由一些普通字符和元字符组成的
- 普通字符就是字母和数字
- 元字符就是具有特殊意义的字符, 常用于表单验证
二.正则边界(定位字符)
^
: 会匹配字符串或者行的起始位置, 在 [ ] 中表示 ''非''(!)$
: 会匹配字符串或行的结束位置 (在 \n 之前)^
,$
一起则表示精确匹配包裹在两个符号之间的字符串\A
: 指定匹配必须出现在字符串的开头(忽略 Multiline 选项)\Z
: 指定匹配必须出现在字符串的结尾或字符串结尾的 \n 之前(忽略 Multiline 选项)
三.量词
-
✳
: 重复零次或更多 (>=0) -
✚
: 重复一次或更多次 ( >=1) -
❔
: 重复零次或一次 (0 || 1) -
{}
: 重复多少次的意思 可以有多少个
四.常用的功能函数
函数 | 说明 |
---|---|
re.match( ) | 从字符串的起始位置匹配, 匹配成功, 返回一个匹配的对象, 否则返回None |
re.search( ) | 扫描整个字符串并返回第一个成功的匹配 |
re.findall( ) | 在字符串中找到正则表达式所匹配的所有子串, 并返回一个列表, 如果没有找到匹配的, 则返回空列表 |
re.split( ) | 将一个字符串按照正则表达式匹配结果进行分割, 返回列表类型 |
re.finditer( ) | 在字符串中找到正则表达式所匹配的所有子串, 并把它们作为一个迭代器返回 |
re.sub( ) | 把字符串中所有匹配正则表达式的地方替换成新的字符串 |
re.complie( ) | 将正则表达式传入, 返回一个匹配对象, 一般与其他方法组合使用 |