首先, 我们在网页上进行注册或者登陆的时候经常能看到一些格式上的错误提示.
比如: 你在注册163账号的时候 注册网易免费邮箱 - 中国第一大电子邮件服务商输入邮箱地址随意的输入系统会提示你. 你的账号过长或者不允许使用中文等等操作.
那这种操作如果使用我们现有的知识点是可以完成的. 但是完成的效果并不好. 写起来也不容易. 尤其是对邮箱的匹配. 电话号码的匹配.
那正则表达式就是专门来处理类似问题的一种表达式. 英文全称: Regular Expression. 简称 regex或者re. 但你要知道我们在使用python的re模块之前. 我们首先要对正则有一定的了解和认识. 就像我们使用time模块之前. 我们已经对时间有了一定的认识.
正则表达式是对字符串操作的一种逻辑公式. 我们一般使用正则表达式对字符串进行匹配和过滤. 使用正则的优缺点:
优点: 灵活, 功能性强, 逻辑性强.
缺点: 上手巨难. 一旦上手, 会对这个东西爱不释手
工具: 各大文本编辑器一般都有正则匹配功能. 我们也可以去正则表达式在线测试 - 站长工具进行在线测试.
元字符
元字符: 元字符才是正则表达式的灵魂. 元字符中的内容太多了, 在这里我们只介绍一些常用的. 可以匹配单一文字符号的
1. 字符组
字符组很简单用[]括起来. 在[]中出现的内容会被匹配. 例如:[abc] 匹配a或b或c
如果字符组中的内容过多还可以使用- , 例如: [a-z] 匹配a到z之间的所有字母 [0-9]匹配所有阿拉伯数字
思考: [a-zA-Z0-9]匹配的是什么?
2. 基本的元字符
基本的元字符. 这个东西网上一搜一大堆. 但是常用的就那么几个:
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线
\s 匹配任意的空白符
\d 匹配数字
\n 匹配一个换行符
\t 匹配一个制表符
^ 匹配字符串的开始
$ 匹配字符串的结尾
\W 匹配非字母或数字或下划线
\D 匹配非数字
\S 匹配非空白符
a|b 匹配字符a或字符b
() 匹配括号内的表达式,也表示一个组
[...] 匹配字符组中的字符
[^...] 匹配除了字符组中字符的所有字符
3. 量词
我们到目前匹配的所有内容都是单一文字符号. 那如何一次性匹配很多个字符呢, 我们要用到量词
注意: 量词控制前面的元字符出现的次数
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
4. 惰性匹配和贪婪匹配
在量词中的?,*, +,{} 都属于贪婪匹配. 就是尽可能多的匹配到结果.
字符串: <p>瞅你咋地,不服我干我</p><p>揍你</p>
正则表达式: <.*>(贪婪匹配)
结果: <p>瞅你咋地,不服我干我</p><p>揍你</p>
正则表达式: <.*?>(惰性匹配)
结果: <p>瞅你咋地,不服我干我</p>
5.分组匹配
在正则中使用()进行分组. 比如. 我们要匹配一个简单的邮箱. 在@之前可以匹配任意6-20个不规则的字母或数字.
[a-zA-Z0-9]{6,}@163.com
6.转义字符
#未转义
print('D:\Desktop\notebook')
# 普通转义
print('D:\Desktop\\notebook')
#r-string
print(r'D:\Desktop\notebook')
D:\Desktop
otebook
D:\Desktop\notebook
D:\Desktop\notebook