Python中的正则表达式
一、介绍
描述了一种字符串匹配的模式,用来查找子串或取出需要的字符串。
二、功能
- 数据验证
- 数据检索
- 数据隐藏
- 数据过滤
三、语法
正则表达式在线测试工具:点击跳转
1、匹配单个字符
正则语法 | 描述 |
---|---|
. | 匹配任意1个字符(除了\n) |
[] | 匹配[ ]中列举的字符 |
\d | 匹配数字,即0-9 |
\D | 匹配非数字,即不是数字 |
\s | 匹配空白,即 空格,tab键 |
\S | 匹配非空白 |
\w | 匹配非特殊字符,即a-z、A-Z、0-9、_、汉字 |
\W | 匹配特殊字符,即非字母、非数字、非汉字 |
2、匹配多个字符
正则语法 | 描述 |
---|---|
* | 匹配前一个字符出现0次或者无限次,即可有可无 |
+ | 匹配前一个字符出现1次或者无限次,即至少有1次 |
? | 匹配前一个字符出现1次或者0次,即要么有1次,要么没有 |
{m} | 匹配前一个字符出现m次 |
{m,n} | 匹配前一个字符出现从m到n次 |
3、匹配开头和结尾
正则语法 | 描述 |
---|---|
^ | 匹配字符串开头 |
$ | 匹配字符串结尾 |
4、其他匹配
正则语法 | 描述 |
---|---|
[^指定字符] | 匹配除了指定字符以外的所有字符 |
| | 匹配左右任意一个表达式 |
四、在python中的应用
导入正则表达式模块re
import re
1、re.match()
语法:
re.match(pattern, string, flags=0)
**说明:**从字符串开头开始匹配一个正则表达式
**注意:**必须要从开头就可以匹配到;若匹配成功返回匹配的对象,匹配不成功返回none
参数说明:
pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位,可以更改某些匹配方式
**获得返回对象:**group()
2、re.search()
语法:
re.search(pattern, string, flags=0)
**说明:**根据正则表达式扫描整个字符串,返回第一个匹配成功的数据
**注意:**在整个字符串中查找;若匹配成功返回匹配对象,匹配不成功返回none
参数说明:
pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位,可以更改某些匹配方式
3、re.findall()
语法:
re.findall(pattern, string, flags=0)
**说明:**根据正则表达式扫描整个字符串,以列表的形式返回所有匹配到的数据
**注意:**在整个字符串中查找,返回格式为列表;匹配成功返回所有成功的数据,不成功则返回空列表;如果使用分组的话匹配成功后返回的是所有分组的数据,其他数据不会返回
参数说明:
pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位,可以更改某些匹配方式
4、re.split()
语法:
re.split(pattern, string, maxsplit=0, flags=0)
**说明:**根据正则表达式匹配的子串对原字符串进行分割,分割后的多个字符串以列表的形式返回
参数说明:
pattern:匹配的正则表达式
string:要匹配的字符串
maxsplit:分割次数,默认为0(不限次数)
flags:标志位,可以更改某些匹配方式
5、正则匹配分组
语法:
(正则表达式) —— 将括号中的字符作为一个分组
(?P正则表达式) —— 对分组起别名name
**注意:**分组的数据从1开始排列,需要引用时使用 group(*) 取出第 * 组的数据
引用分组:
\num :引用正则中第num个分组匹配到的字符串
(?P=name) :引用正则中别名为name分组匹配到的字符串
6、re.sub()
语法:
re.sub(pattern, repl, string, count=0, flags=0)
**说明:**根据正则表达式匹配字符串中的所有子串,然后用指定内容进行替换;返回的是替换后的字符串
**注意: **repl 中也可以使用正则表达式匹配后分组的数据
参数说明:
pattern:匹配的正则表达式
repl:替换的字符串,也可以是一个函数
string:要匹配的字符串
count:替换的次数
flags:标志位,可以更改某些匹配方式
7、正则表达式修饰符 - 可选标志
**说明:**标志可以选更改匹配的模式,通过 flags= 来设置
修饰符 | 描述 |
---|---|
re.I | 匹配时不区分大小写 |
re.M | 多行匹配,影响 ^ 和 $ |
re.S | 使 . 匹配包括换行在内的所有字符 |
五、贪婪模式和非贪婪模式
1、说明:贪婪模式和非贪婪模式影响的是匹配的长度,默认为贪婪模式
- 贪婪模式:在整个表达式匹配成功的前提下,尽可能多的匹配。
- 非贪婪模式:在整个表达式匹配成功的前提下,尽可能少的匹配。
2、正则表达式中的量词:*、{m, n}、?、+ 这些量词默认都是贪婪模式的匹配,可以在这些量词后加 ? 将其变为非贪婪模式。