一、正则表达式
正则表达式是一门独立的技术,所有的编程语言都可以使用
它的作用可以简单的概括为:利用一些特殊符号(也可以直接写需要查找的具体字符
)的组合产生一些特殊的含义然后去字符串中筛选符合条件的数据
如果想要在Python中使用正则表达式,需要借助于re模块,内置的
需求:利用我们前期所学的代码编写一个校验用户输入的手机号格式是否正确
我们都知道国内手机号码开头都是 13|14|15|17|18|19
import re 导入正则模块
phone_number = input('请输入手机号>>>:').strip() 获取手机号
if not re.match('^(13|14|15|18)[0-9]{9}$]', phone_number):
print('不是合法的手机号码')
else:
print('是合法手机号码')
'正则表达式最终的本质还是使用一些符号的组合产生一些特殊的含义,容纳后筛选出符合条件的数据'
二、正则表达式之字符组
可以通过网络上一些在线网站测试如:https://tool.chinaz.com/regex/、https://c.runoob.com/front-end/854/
'''下面是一些常见的正则表达式字符组'''
[0-9]匹配0到9之间的任意一个数字(包括0和9)
全写是:[0123456789]
[A-Z]匹配A到Z之间的任意一个字母(包括A和Z)
全写是:[ABCDEF.....WXYZ]
[a-z]匹配a到z之间的任意一个字母(包括a和z)
全写是:[abcdef....wxyz]
在中括号内编写的多个数据值彼此都是或的关系
[0-9a-zA-Z] 数字、小写字母、大写字母都可以
三、正则表达式之字符(特殊符号)
特殊字符默认情况下都是挨个挨个匹配
元字符 | 匹配内容 |
---|---|
. | 匹配除换行符以外的任何字符 |
\w | 匹配字母或数字或下划线 |
\W | 匹配非字母或非数字或非下划线 |
\d | 匹配数字 |
\n | 匹配一个换行符 |
^ | 匹配字符串的开头 |
$ | 匹配字符串的结尾 |
a I b | 匹配字符a或字符b(管道符的意思是或) |
() | 给正则表达式分组 不影响正则表达式的匹配 |
[ ] | 匹配字符组中的字符 |
[ ^ ] | 取反操作 匹配除了字符组里面的其他所有字符 |
四、正则表达式之量词
量词只能影响前面一个字符(如:ab+ 只能影响b)
量词不能单独使用,必须配合表达式使用
正则表达式默认情况下都是贪婪匹配>>>:尽可能多的匹配
量词 | 用法说明 |
---|---|
* | 重复零次或更多次(默认多次) |
+ | 重复一次或更多次(默认多次) |
? | 重复零次或一次(作为量词意义不大,主要用于非贪婪匹配) |
{n} | 重复n次 |
{n,} | 重复n次或更多次(默认多次) |
{n,m} | 重复n到m次(默认是m次) |
五、贪婪匹配与非贪婪匹配
所有的量词都是贪婪匹配如果想要变成非贪婪匹配只需要在量词后面加问号
我们在使用贪婪匹配或者非贪婪匹配的时候一般都是用.(句点符号)或者.?并且结束的标志有上述符号左右两边添加的表达式决定
'''
1.贪婪匹配:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配
2.加上?会将贪婪匹配模式转为非贪婪匹配模式,会匹配尽量短的字符串
'''
待匹配的文本:<script>alert(123)</script>
待使用的正则表达式(贪婪匹配):<.*>
结果:<script>alert(123)</scripot>
'''第一个书名号会接受所有的内容到<script>alert(123)</script>最后一个反书名号留给最后一个'''
# .*属于典型的贪婪匹配 使用它结束条件一般在左右明确指定
待使用的正则表达式(非贪婪匹配):<.*?>
结果:<script> </script>
'''第一个书名号也是如此接收到最后一个书名号 最后一个反书名号给最后一个反书名号 中间值接收不了'''
几个常用的非贪婪匹配
表达式:
*? 重复人一次,但尽可能少重复
+? 重复1此或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复
六、取消转义
正则表达式中取消斜杠与字母的特殊含义 就是在斜杠前面加斜杠
\n 匹配的是换行符
\\n 匹配的是文本\n
\\\n 匹配的是文本\\n
'用斜杠来取消\n的特殊含义'
'''如果是在python中使用 还可以再字符串前面加r取消转义'''
七、正则表达式之实战应用
编写校验用户手机号的正则
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})
'''由于正则表达式的复杂性,所以以后遇到常见的匹配规则,我们直接搜素引擎搜就是了'''
ps:能够写出简单的正则 能够大致看懂负责的正则就行