正则法则知识
今日内容
正则法则
正则表达式
-
简介正则法则不属于任何一门编程语言 是一个独立的学科 主要用于数据的查找与筛选 -
前戏手机号的校验,输入是否合法
纯代码实现# 1.获取用户输入的手机号phone_num = input('请输入您的手机号>>>:').strip()# 2.判断用户输入的手机号是否是纯数字if phone_num.isdigit():# 3.判断总长度是否是11位if len(phone_num) == 11:# 4.判断是否以常见的电话号码开头 13 15 17 18 19if 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 rephone_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})
这些常用的肯定是已经有人已经写过了的,这个时候我们可以通过百度查询
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!























