一.什么是正则:
1.根据指定规则从字符串中提取子字符串
2.指定规则:正则表达式
3.字符串:待匹配字符串
子字符串:匹配结果
4.注意:正则并不是python独有的,各种语言都可以使用正则
二.正则表达式应用场景
1.表单验证(手机号验证,账号验证,密码验证)
2.爬虫
3.其他
正则表达式的语法:
1.元字符:可以匹配一个的符号
- ():匹配任意字符,换行除外\n
- []:一个特殊的的字符组如下:
- [a-z]:a到z的任意小写字母
- [A-Z]:A到Z的任意大写字母
- [0-9]:0到9的任意数字
- \d:匹配任意数字
- \D:匹配非数字
- \s:匹配空白符
- \S:pp非空白符
- \w:匹配数字字母下划线
- \W:匹配非数字字母下划线
- ^:以什么开头
- $:以什么结果
2.量词:匹配字符的数量
- ?*:匹配多个或无数个
- +:匹配1个或者无数个
- ?:匹配哟个或者无数个
- {m}:匹配m个
- {m,n}:匹配m个到n个
- {m,}:最少匹配m个
- {,n}:匹配最多n个
3.贪婪匹配和非贪婪匹配
- 贪婪匹配是指在正则匹配的过程中尽量往多了匹配,正则表达式默认往多了匹配
- 非贪婪匹配是指一旦满足了正则表达式,就将匹配到的作为一个结果,然后向后匹配,直到找出不满足的结果为止,换言之,就是一个字符串尽量少了匹配,非贪婪匹配就要在两次后边使用?进行修饰
4.分组与或
4.1分组
- 分组:是在正则表达式中使用()将正则表达式的一部分括起来表示一部分
- 作用:
4.2或的使用
- 或:用"|"分割的正则表达式,代表按照|两边的正则表达式进行匹配行
- 示例:abc(\d|def)
- 正则表达式前面的abc是固定的,必须匹配abc三个字母,abc后面()表示任意匹配,()中的\d和def分别满足表达式,比如按照上面的正则表达式对"abc789---abcdef999"的匹配结果为abc789和abcdef
5.使用re模块实现正则表达式操作
- match():match(0用于从字符串的开始处开始进行匹配,如果在起始位置匹配成功,则返回Match对象,否则返回None,即当匹配到第一个结果后就直接返回,不再进行匹配,同理,匹配的第一个字母不符合条件时,则返回None,s语法格式如下:re.match(pattern,string,[flags])
- 参数说明:
- pattern:表示模式字符串,由要匹配的正则表达式转换而来
- string:表示要匹配多的字符串
- flags:可选的参数,表示标志位,用于控制匹方式??
- 常用标志:
- A或者ASCII :对于\w, \W, \b, \B, \d ,\D, \s和\S? 只进行?ASCII匹配(仅仅适用于Python 3.x)
- I 或者IGNORECASE :执行不区分字母大小写的匹配
- S或DOTALL:使用(.)字符怕所有字符,包括换行符
- X或VERBOSE:忽略模式字符串中未转义的空格和注释
- 例如:匹配字符串是否以“mr_”开头,不区分字母大小写,代码如下? ??
import re
pattern = r'mr_\w+' # 模式字符串
string = 'MR_SHOP mr_shop' # 要匹配的字符串
match = re.match(pattern,string,re.I) # 匹配字符串,不区分大小写
print(match) # 输出匹配结果
string = '项目名称MR_SHOP mr_shop'
match = re.match(pattern,string,re.I) # 匹配字符串,不区分大小写
print(match) # 输出匹配结果
执行结果如下:
<_sre.SRE_Match object; span(0,7),match='MR_SHOP'> # span为匹配的起始位置
None
- ?search()方法用于再整个字符串中搜索第一个匹配的值,如果匹配成功,则返回match对象,否则返回None,search()方法不仅仅是再字符串的起始位置搜索,如其他位置有符合的匹配也可以进行搜索,search()方法的语法格式如下:re.search(pattern,string,[flags])
- 参数说明:
- pattern:表示模式字符串,有要匹配的正则表达式转化而来
- string:表示要匹配的字符串
- flags;可选参数,表示标志位,用于控制匹配方式
- 例子:搜索一个以“mr_”开头的字符串,不区分字母大小写:
import re
pattern = r'mr_\w+' # 模式字符串
string = 'MR_SHOP mr_shop' # 要匹配的字符串
match = re.match(pattern,string,re.I) # 匹配字符串,不区分大小写
print(match) # 输出匹配结果
string = '项目名称MR_SHOP mr_shop'
match = re.match(pattern,string,re.I) # 匹配字符串,不区分大小写
print(match) # 输出匹配结果
执行结果如下:
<_sre.SRE_MATCH object;span(0,7),match='MR_SHOP'>
<_sre.SRE_MATCH object;span(4,11),match='MR_SHOP'> # span为匹配的起始位置
|