正则表达式
该知识点不属于任何一门编程语言 是一个独立的学科 主要用于数据的查找与筛选
1.前戏
需求:编写代码校验用户输入手机号是都合法
常见 13 15 17 18 19
纯python代码逻辑实现
#1.获取用户输入的手机号
phone_num = input('输入您的手机号>>>:').strip()
#2.判断输入的手机号是否是纯数字
if phone_num.isdigit():
# 3.判断总长度是否是11位
if len(phone_num) == 11:
# 4.判断开始的数字是否满足常见号码
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('输入不合法!')
总结
正则表达式本质上就是使用一些符号的组合产生一些特殊的含义
然后去字符串中筛选出符合条件的数据
2.正则表达式之字符组
正则表达式线上测试网址:http://tool.chinaz.com/regex/
‘’‘字符组在没有量词修饰的情况下一次只会针对一个数据值’‘’
[0 - 9]
匹配0 - 9之间的任意一个数字(包括0和9)
全称是:[0123456789]
[A - Z]
匹配A到Z之间的任意一个字母(包括A和Z)
全称是:[ABCDEFGHIJKLMNOPQRSTUVWXYZ]
[a - z]
匹配a - z之间的任意一个字母(包括a和z)
全称是:[abcdefghijklmnopqrstuvwxyz]在括号中编写的多个数据值彼此都是或的关系
[0 - 9a - zA - Z]
数字、小写字母、大写字母
3.正则表达式之特殊符号
特殊符号在没有量词修饰的情况一个符号一次只会针对一个数据值
.
匹配除换行符以外的字符
\w
匹配字母或数字或下划线
\W
匹配非字母或者数字或下划线
\d
匹配数字
^
匹配字符串出现的开头
$
匹配字符串的结尾ps: ^ 与$的组合能够明确的限制想要查找的具体数据 ^ 9$
a | b
匹配字符a或者bps: 管道符 | 在很多场景下的意思都是或
( )
给正则表达式分组
不影响正则表达式的匹配ps: 用于后续的正则起别名 分组获取对应数据
[ ]
匹配字符组中的字符
[ ^ ]
匹配除了字符组中字符的所有字符
4.正则表达式之量词
在正则表达式中所有的量词默认都是贪婪匹配(尽可能多的)
量词不能单独使用 必须跟在表达式的后面 并且只能影响紧挨着的左边那一个
*
重复零次或更多次(默认就是尽可能多)
+
重复一次或更多次(默认就是尽可能多)
?
重复零次或者一次(默认就是一次)
{n}
重复n次
{n, }
重复n次或者更多次
{n, m}
重复n到m次
5.正则表达式练习题
方式 | 题目 | 结果 |
海. | 海燕海娇海东 | 海燕 海娇 海东 |
^ 海. | 海燕海娇海东 | 海燕 |
海.$ | 海燕海娇海东 | 海东 |
李.? | 李杰和李莲英和李二棍子 | 李杰 李莲 李二 |
李.* | 李杰和李莲英和李二棍子 | 李杰和李莲英和李二棍子 |
李.+ | 李杰和李莲英和李二棍子 | 李杰和李莲英和李二棍子 |
李.{1, 2} | 李杰和李莲英和李二棍子 | 李杰和 李莲英 李二棍 |
李[杰莲英二棍子]* | 李杰和李莲英和李二棍子 | 李杰 李莲英 李二棍子 |
李[ ^ 和]* | 李杰和李莲英和李二棍子 | 李杰 李莲英 李二棍子 |
[\d] | 456bdha3 | 4 5 6 3 |
[\d]+ | 456bdha3 | 456 3 |
6.贪婪匹配与非贪婪匹配
待匹配的文本: < script > alert(123) < / script >
正则表达式: <.* > # 贪婪匹配上述正则匹配出来的内容是: < script > alert(123) < / script >
正则表达式: <.* ? > # 非贪婪匹配上述正则匹配出来的内容是: < script > < / script >
所有的量词默认都是贪婪匹配 但是如果在量词的后面紧跟一个问号 那么就会变成非贪婪匹配
小技巧:以后我们在使用贪婪匹配或者非贪婪匹配的时候一般都是用.或者.? 并且结束的标志有上述符号左右两边添加的表达式决定
7.取消转义
正则表达式中取消斜杠与字母的特殊含义 就是在斜杠前面加斜杠
\\n \n
\\\\n \\n
在python中有更加简便的写法
r'\n'
r'\\n'
8.正则表达式实战
编写校验用户手机号的正则
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]([0-9] {5,11})
常见的正则百度查找即可 我们需要做到的时候能够看到别人写的 能够完成基础的修改即可