今日内容正则法则 正则表达式
-
简介
正则法则不属于任何一门编程语言 是一个独立的学科 主要用于数据的查找与筛选
-
前戏
手机号的校验,输入是否合法
纯代码实现
# 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⾥数量词默认是贪婪的,总是尝试匹配尽可能多的字符;⾮贪婪则相反,总是尝试匹配尽可能少的字符。
待匹配的文本: 正则表达式:<.*> # 贪婪匹配 上述正则匹配出来的内容是: 正则表达式:<.*?> # 非贪婪匹配 上述正则匹配出来的内容是:
贪婪匹配
非贪婪匹配
所有的量词默认都是贪婪匹配 但是如果在量词的后面紧跟一个问号 那么就会变成非贪婪匹配 小技巧:以后我们在使用贪婪匹配或者非贪婪匹配的时候一般都是用.*或者.*? 并且结束的标志有上述符号左右两边添加的表达式决定取消转义
- 问题引入
正则表达式里使用””作为转义字符,这就可能造成反斜杠困扰。 - 处理方法
假如你需要匹配文本中的字符””,那么使用编程语言表示的正则表达式里将需要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})
这些常用的肯定是已经有人已经写过了的,这个时候我们可以通过百度查询



