- 正则表达式
1.正则表达式简介
(1)引言
当你遇到一些字符数据,要对其进行筛查和校验时大概对于刚入行的小白来说就是利用if…else…相互嵌套逐步对数据进行相应的处理。这样的话就会在老程序员眼里显得过程太臃肿了,此时他就会告诉你去看看正则表达式在来写。
(2)概念
正则表达式是一门独立的语言,专门用来匹配,校验和筛查所需数据,通用于任何编程语言。
2.正则表达式的使用之python语言
(1)在python中如果想要使用正则就必须借助于re模块。
(2)前戏之手机号码验证
使用纯python编写:# 需求:编写代码校验用户输入的手机号是否合法,常见 13 15 17 18 19 # 获取用户输入的手机号 phone_number = input('please input your phone_nuber>>>:').strip() # 判断用户输入的手机号是否为纯数字 if phone_number.isdigit(): # 判断总长度是否是11位 if len(phone_number) == 11: # 判断是否是以常见电话号(13,17,18,19)开头 if phone_number.startswith('13') or phone_number.startswith('15') or >phone_number.startswith( '17') or phone_number.startswith('18') or >phone_number.startswith('19'): print('手机号合法') print(int(phone_number)) else: print('手机号开头不对') else: print('手机号必须是十一位') else: print('手机号必须是纯数字')使用正则编写:
import re phone_number = input('please input your phone_nuber>>>:').strip() if re.match('^[13|15|17|18|19][0-9]{9}',phone_number): print(phone_number) else: print('输入不合法')
3.总结
正则表达式本质上就是使用一些符号的组合产生一些特殊的含义;
再然后去字符串中筛选出符合条件的数据。
(二)正则表达式之字符串4.正则表达式线上测试网址:
http://tool.chinaz.com/regex/
1.说明:
字符串在没有量词修饰的情况下一次只会针对一个数据
(三)正则表达式之特殊符号2.列表表述
在中括号内编写的多个数据值彼此都是或的关系
正则 说明 全称 [0-9] 匹配0到9之间的任意一个数字(包括0和9) [0123456789] [A-Z] 匹配A到Z之间的任意一个字母(包括A和Z) [ABCD,WXYZ] [a-z] 匹配a到z之间的任意一个字母(包括a和z) [abcd…wxyz]
1.说明:
特殊符号在没有量词修饰的情况下一个符号一次只会针对一个数据值
(四)正则表达式之量词2.列表表述
(1)^于$的组合能够明确的限制想要查找的具体数据
(2)管道符|在很多场景下的意思都是或
(3)()用于后续的正则起别名,分组获取对应数据
正则 说明 . 匹配除换行符以外的任意字符 w 匹配字母或数字或下划线 W 匹配非字母或数字或下划线 d 匹配数字 ^ 匹配字符串的开头 $ 匹配字符串的结尾 a管道符b 匹配字符a或字符b () 给正则表达式分组,不影响正则表达式的匹配 [] 匹配字符组中的字符 [^] 匹配除了字符组中字符的所有字符
1.说明:
在正则表达式中所有的量词默认都是贪婪匹配(尽可能多的匹配)
(五)正则表达式练习2.列表表述
量词不能单独使用,必须跟在表达式的后面,并且只能影响紧挨着的左边那一个
正则 说明 * 重复零次或更多次(默认就是更多次) + 重复一次或更多次(默认就是更多次) ? 重复零次或一次(默认就是一次) {n} 重复n次 {n,} 重复n次或更多次 {n,m} 重复n到m次
类型一: . ^ $
正则 匹配结果 待匹配字符 说明 海. 海燕海娇海东 海燕海娇海东 匹配所有"海."的字符 ^海. 海燕 海燕海娇海东 只从开头匹配"海." 海.$ 海东 海燕海娇海东 只匹配结尾的"海.$"
类型二:* + ? { }
正则 匹配结果 待匹配字符 说明 李.? 李杰 李莲 李二 李杰和李莲英和李二棍子 ?表示重复零次或一次,即只匹配"李"后面一个任意字符 李.* 李杰和李莲英和李二棍子 李杰和李莲英和李二棍子 *表示重复零次或多次,即匹配"李"后面0或多个任意字符 李.+ 李杰和李莲英和李二棍子 李杰和李莲英和李二棍子 +表示重复一次或多次,即只匹配"李"后面1个或多个任意字符 李.{1,2} 李杰和李莲英李二棍 李杰和李莲英和李二棍子 {1,2}匹配1到2次任意字符
(六)贪婪匹配与非贪婪匹配类型三(字符集):[][^]
正则 匹配结果 待匹配字符 说明 李[杰莲英二棍子]* 李杰 李莲英 李二棍子 李杰和李莲英和李二棍子 表示匹配"李"字后面[杰莲英二棍子]的字符任意次 李[^和]* 李杰 李莲英 李二棍子 李杰和李莲英和李二棍子 表示匹配一个不是"和"的字符任意次 [d] 4 5 6 3 456bdha3 表示匹配任意一个数字,匹配到4个结果 [d]+ 456 3 456bdha3 表示匹配任意个数字,匹配到2个结果
1.概念表述:
在满足匹配时,匹配尽可能长的字符串。
名词 符号 贪婪匹配 .* 非贪婪匹配 .*? 结束的标志有上述符号左右两边添加的表达式决定
(七)取消转义2.举个栗子
正则 待匹配字符 匹配结果 说明 <.*> < script>alert(123)< /script> < script>alert(123)< /script> 默认为贪婪匹配模式,会匹配尽量长的字符串 <.*?> < script>alert(123)< /script> < script> /script> 加上?为将贪婪匹配模式转为非贪婪匹配模式,会匹配尽量短的字符串
1.存在说明:
在正则表达式中,存在着很多特殊意义的元字符,eg:n;s等,如果要匹配正确的n或s而不是换行符就需要对进行转义,变成.
(八)正则表达式实战2.转义符说明
正则 待匹配字符 匹配结果 说明 n n False 在正则表达式中是有特殊意义的字符,n表示换行 双斜杠n n True 转义之后变成,即可匹配 “\n” ‘n’ True 在python中,字符串中的’‘也需要转义,所以每一个字符串’'又需要转义一次 r’n’ r’n’ True 在字符串之前加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})



