概念
(regular expression)描述了一种字符串匹配的模式,可以用来检查一个大字符串中是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等
模式
一种特定的字符串模式,这个模式是通过一些特殊的符号组成的
特点
1: 正则表达式的语法很令人头疼,可读性差
2: 正则表达式通用行很强,能够适用于很多编程语言
python中正则表达式模块: re
正则表达式匹配方式:
match匹配:
match匹配格式: re.match(正则表达式,大字符串,标志位)
match匹配规则: 只能从开头开始匹配,只能返回第一个匹配成功的数据
注意:匹配成功后结果是re.Match对象,想要获取对应匹配数据使用group()函数
注意: 如果匹配失败返回None
search匹配:
search匹配格式: re.search(正则表达式,大字符串,标志位)
search匹配规则: 可以扫描整个大字符串进行匹配,只能返回第一个匹配成功的数据
注意:匹配成功后结果是re.Match对象,想要获取对应匹配数据使用group()函数
注意: 如果匹配失败返回None
findall匹配:
findall匹配格式: re.findall(正则表达式,大字符串,标志位)
findall匹配规则: 扫描整个大字符串进行匹配,把所有匹配成功的数据放到列表中返回
注意: 匹配的结果是列表list类型的,正常操作列表即可
注意:
1:如果匹配失败返回的是空列表[]
2:正则表达式中如果使用小括号,自动只获取小括号内数据,放到列表中
正则表达式中的字符匹配
注意:一般^和$配合使用,可以起到限制作用
符号 | 解释 |
---|---|
. | 任意一个字符,除了\n |
[] | 中括号中的任意一个字符 |
[^x] | 如果^在括号中,代表除了x外其他所有字符 |
^ | 不在括号中,代表以…开头 |
$ | 以…结尾 |
* | 不能单独用,一般放到某个字符后,代表这个字符出现0次或者多次------次数>=0 |
+ | 不能单独用,一般放到某个字符后,代表这个字符出现1次或者多次------次数>=1 |
? | 不能单独用,一般放到某个字符后,代表这个字符出现0次或1次------次数=0\1 |
{x} | 不能单独使用,一般放到某个字符后,代表这个字符出现了x次 |
{x,} | 不能单独使用,一般放到某个字符后,代表这个字符至少出现了x次 |
{x,y} | 不能单独使用,一般放到某个字符后,代表这个字符出现x到y次 |
\d | 任意一个数字 |
\D | 任意一个非数字 |
\w | 任意一个正常字符(字母,数字,下划线) |
\W | 任意一个非正常字符(特殊字符,汉字) |
\s | 任意一个空白(空格、\t制表符、\n换行符) |
\S | 任意一个非空白 |
.*/.+ | 贪婪模式:在整个表达式匹配成功的前提下,尽可能多的匹配 |
.*?/.+? | 非贪婪模式:在整个表达式匹配成功的前提下,尽可能少的匹配 |
正则标志修饰符
修饰符被指定为一个可选的标志,多个标志可以通过按位 OR(|) 它们来指定。
修饰符 | 描述 |
---|---|
re.I | 匹配时不区分大小写 |
re.S | 匹配包括换行符\n在内的所有修饰符 |
正则表达式匹配分组
正则中以()包括的内容进行分组,并自动生成对应的编号,起始编号为1
import re
result = re.match('^([a-zA-Z0-9_]{4,10})@(163\.com)$', "zhangsan@163.com")
# 注意: 0代表匹配到的所有数据,可以省略不写
print(result.group(0))
print(result.group())
# 注意: 上述小括号()代表一个分组,每个分组自动生成了对应的编号(从1开始)
# 获取第1个分组内容
print(result.group(1))
# 获取第2个分组内容
print(result.group(2))
# 注意: 访问不存在的分组就会报错
# print(result.group(3))