正则表达式
正则表达式测试网址:http://tool.chinaz.com/regex/
正则表达式介绍
1.主要用途
用于数据的查找与筛选
2.本质
正则表达式本质上就是使用一些符号的组合产生一些特殊的含义,然后去字符串中筛选出符合条件的数据
3.例题代入
# 需求:编写代码校验用户输入的手机号是否合法
# 1.获取用户输入的手机号
phone_num = input('请输入您的手机号>>>:').strip()
# 2.判断用户输入的手机号是否是纯数字
if phone_num.isdigit():
# 3.判断总长度是否是11位
if len(phone_num) == 11:
# 4.判断是否以常见的电话号码开头 13 15 17 18 19
if phone_num.startswith('13') or phone_num.startswith('15') or phone_num.startswith(
'17') or phone_num.startswith('18') or phone_num.startswith('19'):
print('手机号合法')
print(int(phone_num))
else:
print('手机号开头不对')
else:
print('手机号必须是11位')
else:
print('手机号必须是纯数字')
# 正则表达式实现
import re
phone_num = input('把你的手机号告诉我>>>:').strip()
if re.match('^[13|15|17|18|19][0-9]{9}', phone_num):
print(phone_num)
else:
print('输入不合法')
正则表达式之字符组
字符组在没有量词修饰的情况一次只会针对一个数据值
字符组就是[]括起来,里面写几个数值是或的关系
[0-9] 匹配0到9之间的任意一个数字
[A-Z]匹配A到Z之间的任意一个字母
[a-z]匹配a到z之间的任意一个字符
正则表达式之特殊符号
特殊符号在没有量词修饰的情况一个字符一次只会针对一个数据值
特殊符号 | 功能 |
---|---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线 |
\W | 匹配非字母或数字或下划线 |
\d | 匹配数字 |
^ | 匹配字符串的开头 |
$ | 匹配字符串的结尾 |
a|b | 管道符|,匹配字符a或字符b |
() | 给正则表达式分组,分组获取对应数据 |
[] | 匹配字符组中的字符 |
[^] | 匹配除了字符组中字符的所有字符 |
正则表达式之量词
在正则表达式中所有的量词默认都是贪婪匹配
量词不能单独使用,必须跟在表达式的后面,并且只能影响紧挨着的左边那一个
量词符号 | 功能 |
---|---|
* | 重复0次或着更多次(默认就是尽可能的多) |
+ | 重复一次或者更多次(默认就是尽可能多) |
? | 重复0次或者一次(默认就是一次) |
重复n次 | |
重复n次或者更多次 | |
重复n到m次 |
正则表达式练习题
正则 | 待匹配字符 | 匹配结果 |
---|---|---|
李.? | 李杰和李莲英和李二棍子 | 李杰 李莲 李二 |
李.* | 李杰和李莲英和李二棍子 | 李杰和李莲英和李二棍子 |
李.+ | 李杰和李莲英和李二棍子 | 李杰和李莲英和李二棍子 |
李. | 李杰和李莲英和李二棍子 | 李杰和 李莲英 李二棍 |
贪婪匹配与非贪婪匹配
1.贪婪匹配
所有量词默认都是贪婪匹配
2.非贪婪匹配
量词的后面紧跟一个问号就是非贪婪匹配
3.小技巧
以后我们在使用贪婪匹配或者非贪婪匹配的时候一般都是用.*
或者.*?
并且结束的标志有上述符号左右两边添加的表达式决定
4.例题展示
待匹配的文本:
正则表达式:<.*> # 贪婪匹配
上述正则匹配出来的内容是:
正则表达式:<.*?> # 非贪婪匹配
上述正则匹配出来的内容是:
取消转义
正则表达式中取消斜杠与字母的特殊含义 就是在斜杠前面加斜杠
1.在正则中的写法
例如:\\
n------->\n
\\\\
n------>\\
n
2.在python中的写法
例如:r'\n',r'\n'
正则表达式实战
编写校验用户手机号的正则:0?(13|14|15|17|18|19)[0-9]{9}
编写校验用户身份证的正则:\d{17}[\d|x]|\d{15}
编写校验用户邮箱的正则:\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+.)+[A-Za-z]{2,14}
编写校验用户qq号的正则:1-9
...