今日内容
正则法则
正则表达式
-
简介
正则法则不属于任何一门编程语言 是一个独立的学科 主要用于数据的查找与筛选
-
前戏
手机号的校验,输入是否合法
纯代码实现
# 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('输入不合法')
总结
正则表达式本质上就是使用一些符号的组合产生一些特殊的含义
然后去字符串中筛选出符合条件的数据
正则表达式之字符组
正则表达式线上测试网址:
http://tool.chinaz.com/regex/
字符组在没有量词的情况下,一次只会针对一个数据值
[0-9] | 匹配0到9之间的任意一个数字(包括0和9) | 全称是:[0123456789] |
[A-Z] | 匹配A到Z之间的任意一个字母(包括A和Z) | 全称是:[ABCD…WXYZ] |
[a-z] | 匹配A到Z之间的任意一个字母(包括a和z) | 全称是:[abcd…wxyz] |
[0-9a-zA-Z] | 数字、小写字母、大写字母都可以 |
在中括号内编写的多个数据值彼此都是或的关系
正则表达式之特殊符号
特殊符号在没有量词修饰的情况一个符号一次只会针对一个数据值
- 匹配单个字符
符号 | 功能 |
---|---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线 |
\W | 匹配非字母或非数字或非下划线 |
\d | 只匹配数字 |
\D | 匹配非数字,即不是数字 |
\s | 匹配空白,即空格 |
\S | 匹配非空白 |
- 特殊符号
符号 | 功能 |
---|---|
^ | 匹配字符串的开头 |
$ | 匹配字符串的末尾 |
() | 给正则表达式分组,不影响正则的正常匹配 |
[] | 匹配字符组内的字符 |
[^] | 匹配除了字符组中的字符以外的字符 |
举例说明
.
的用法
\w
的用法
\W
的用法
\d
的用法
\D
的用法
\s
的用法
\S
的用法
^
的用法
$
的用法
[]
的用法
()
的用法
[^]
的用法
正则表达式之量词
符号 | 功能 |
---|---|
* | 重复零次或者多次(默认情况下就是尽可能的多) |
+ | 重复一次或者多次(默认情况下就是尽可能的多) |
? | 重复零次或者一次(默认情况下就是一次) |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n次到m次(默认情况下为m次) |
举例说明
*
的用法
+
的用法
?
的用法
{n}
的用法
{n,}
的用法
{n,m}
的用法
正则表达式练习题
.^$
正则 待匹配字符 匹配结果 说明 海. 海燕海娇海东 海燕海娇海东 匹配所有"海."的字符 ^海. 海燕海娇海东 海燕 只从开头匹配"海." 海.$ 海燕海娇海东 海东 只匹配结尾的"海.$"
贪婪匹配与非贪婪匹配
Python⾥数量词默认是贪婪的,总是尝试匹配尽可能多的字符;⾮贪婪则相反,总是尝试匹配尽可能少的字符。
待匹配的文本:<script>alert(123)</script>
正则表达式:<.*> # 贪婪匹配
上述正则匹配出来的内容是:<script>alert(123)</script>
正则表达式:<.*?> # 非贪婪匹配
上述正则匹配出来的内容是:<script> </script>
贪婪匹配
非贪婪匹配
所有的量词默认都是贪婪匹配 但是如果在量词的后面紧跟一个问号
那么就会变成非贪婪匹配
小技巧:以后我们在使用贪婪匹配或者非贪婪匹配的时候一般都是用.*或者.*?
并且结束的标志有上述符号左右两边添加的表达式决定
取消转义
问题引入
正则表达式里使用”\”作为转义字符,这就可能造成反斜杠困扰。处理方法
假如你需要匹配文本中的字符”\”,那么使用编程语言表示的正则表达式里将需要4个反斜杠”\”:前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,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})
这些常用的肯定是已经有人已经写过了的,这个时候我们可以通过百度查询