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