用正则表达式校验手机号,邮箱就是流弊【python爬虫入门进阶】(08)
文章目录- 说在前面
- 验证手机号
- 验证邮箱
- 验证url
- 验证身份证号
- 转义字符和原生字符
- 对
进行转移
- group分组
- find_all 函数
- sub 用来替换字符串
- split函数
- compile
- 总结
说在前面
上一篇文章我们主要介绍了正则表达式的各种语法。学好正则表达式,啥难匹配的内容都给我匹配上【python爬虫入门进阶】(07) 还没看的小伙伴赶紧去看看哦!!!这篇文章主要将介绍正则表达式的一些实战小案例。比如:用正则表达式校验邮箱,手机号等等。
验证手机号
手机号的格式一般是首位是1,第二位是34578中间的任意一个数,最后9位是随机数字。所以,他的正则表达式是:1[34578]d{9}
text = "158523026956"
ret = re.match('1[34578]d{9}', text)
print(ret.group())
验证邮箱
邮箱的格式比较多,但是基本的格式可以分为三块:ya09322133@qq.com
第一部分是 @符号前面是字母或者数字,所以这部分就是w+
,
第二部分是@符号之后. 号之前这部分一般是a-z之间的字母或者数字,所以这部分的表达式是:[a-z0-9]+
。
最后一部分就是**.**符号之后的部分,这部分就是a-z之间的字母,所以这部分的表达式是[a-z]+
。
所以,最终的表达式是:w+@[a-z0-9]+.[a-z]+
text = "ya09322133@qq.com"
ret = re.match('w+@[a-z0-9]+.[a-z]+', text)
print(ret.group())
验证url
url的格式分为两个部分:https://blog.csdn.net/u014534808
第一部分是:://
之前的部分,这部分一般是以http,https或者ftp。所以,这部分的表达式是:http|https|ftp
第二部分是:://
之后的部分,这部分的要求就是不能以空白字符开头或者以
,
等开头。所以,这部分的表达式是:[^s]+
text = "https://blog.csdn.net/u014534808"
ret = re.match('(http|https|ftp)://[^s]+', text)
print(ret.group())
验证身份证号
身份证号有一个标准的格式,如:34492618821223401x 。它的位数一共是18位,前面17位都是数字。最后一位的话可能是数字也可能是x。所以,验证身份证的表达式可以写为:d{17}[dxX]
。
text = "34492618821223401x"
ret = re.match('d{17}[dxX]', text)
print(ret.group())
转义字符和原生字符
在正则表达式中,有些字符是有特殊意义的字符,因此如果要匹配这些字符,那么久必须要使用反斜杠进行转义。比如:** 代表以...结尾,如果想要匹配**∗∗代表以...结尾,如果想要匹配∗∗,那么就必须使用$
,示例代码如下:
import re
text = "好好学习$天天向上"
ret = re.search('$w+', text)
print(ret.group())
对 进行转移
- 用python的方式可以写成
r' '
- 用正则表达式的方式可以写成
\n
。
text = '\n'
# \==>
# \\n====>
ret=re.match('\\n',text)
print(ret.group())
或者
text = '\n'
# r修饰的就是原生字符串
ret=re.match(r'\n',text)
print(ret.group())
group分组
在正则表达式中,可以对过滤到的字符串进行分组,分组使用圆括号()
的方式。
- group: 和group(0) 是等价的,返回的是整个满足条件的字符串
- groups : 返回的是里面的子组,索引从1开始。
- group(1) :返回的是第一个子组,可以传入多个。
text = "苹果是$99元,橘子是$20元"
ret = re.search('.*($d+).*($d+)', text)
print(ret.group())
print(ret.group(1))
print(ret.group(2))
print(ret.groups())
find_all 函数
find_all函数用于找出所有满足条件的,返回的是一个列表。
text = "苹果是$99元,橘子是$20元"
ret = re.findall('$d+', text)
print(ret)
sub 用来替换字符串
sub 用来替换字符串,将匹配的字符串替换成其他字符串。
html = """
<div>
<ul>
<li class="item-0"><a href="link1.html">你 item</a></li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-inactive"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
"""
ret = re.sub("<.+?>", "", html)
print(ret)
split函数
split函数是用于分割匹配的字符串
text = "码农飞哥,好好加油"
ret = re.split('W', text)
print(ret)
compile
对于一些经常要用到的正则表达式,可以使用compile进行编译,后期再使用的时候可以直接拿来使用,执行效率要更快,而且compile还可以指定 flag=re.VERBOSE
,在写正则表达式的时候可以做注释,示例代码如下:
text = "码农飞哥,身高178.5,正是大好年华"
r = re.compile('d+.?d+')
ret = re.search(r, text)
print(ret.group())
添加注释
text = "码农飞哥,身高178.5,正是大好年华"
r = re.compile(r"""
d+ # 小数点前面的数字
.? #小数点本身
d* #小数点后面的数字
""",re.VERBOSE)
ret = re.search(r, text)
print(ret.group())
总结
本文详细介绍了正则表达式的使用,希望对读者朋友们有所帮助。
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击