栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

小白学python系列————【Day35】正则表达式

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

小白学python系列————【Day35】正则表达式

今日内容概要
  • 正则表达式
正则表达式 (一)正则表达式

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 3456bdha3表示匹配任意一个数字,匹配到4个结果
[d]+456 3456bdha3表示匹配任意个数字,匹配到2个结果




(六)贪婪匹配与非贪婪匹配

1.概念表述:
在满足匹配时,匹配尽可能长的字符串。

名词符号
贪婪匹配.*
非贪婪匹配.*?

结束的标志有上述符号左右两边添加的表达式决定

2.举个栗子

正则待匹配字符匹配结果说明
<.*>< script>alert(123)< /script>< script>alert(123)< /script>默认为贪婪匹配模式,会匹配尽量长的字符串
<.*?>< script>alert(123)< /script>< script> /script>加上?为将贪婪匹配模式转为非贪婪匹配模式,会匹配尽量短的字符串


(七)取消转义

1.存在说明:
在正则表达式中,存在着很多特殊意义的元字符,eg:n;s等,如果要匹配正确的n或s而不是换行符就需要对进行转义,变成.

2.转义符说明

正则待匹配字符匹配结果说明
nnFalse在正则表达式中是有特殊意义的字符,n表示换行
双斜杠nnTrue转义之后变成,即可匹配
“\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})
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1017925.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号