Python零基础从小白打怪升级中~~~~~~~Python正则表达式

Python正在表达式

一、re模块中三个函数

1、match函数

re.match 尝试从字符串的起始位置匹配一个模式,匹配成功则返回的是一个匹配对象(这个对象包含了我们匹配的信息),如果不是起始位置匹配成功的话,match()返回的是空。

注意:match只能匹配到一个

s = 'python123python666python888'
#s = '1python123python666python888'result = re.match('python', s)
print(result)  # <re.Match object; span=(0, 6), match='python'>
print(result.span())  # (0, 6)
print(result.group())  # python
  • 通过span()提取匹配到的字符下标
  • 通过group()提取匹配到的内容

2、search函数

re.search 扫描整个字符串,匹配成功则返回的是一个匹配对象(这个对象包含了我们匹配的信息);当然,若是都找不到则返回None值。
注意:search也只能匹配到一个,找到符合规则的就返回,不会一直往后找

总结:

查找并返回一个匹配项的函数有3个:search、match、fullmatch,他们的区别分别是:

search: 查找任意位置的匹配项
match: 必须从字符串开头匹配
fullmatch: 整个字符串与正则完全匹配

3、findall函数

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表

s = '1python123python666python888'result = re.findall('python', s)
print(result)  # ['python', 'python', 'python']

总结

1.查找一个匹配项

查找并返回一个匹配项的函数有3个:search、match、fullmatch,他们的区别分别是:

search: 查找任意位置的匹配项
match: 必须从字符串开头匹配
fullmatch: 整个字符串与正则完全匹配

2.查找多个匹配项

查找多项函数主要有:findall函数 与 finditer函数:

findall: 从字符串任意位置查找,返回一个列表
finditer:从字符串任意位置查找,返回一个迭代器

正则表达式的应用方向:

  • 判断用户注册帐号是否满足格式
  • 抓取页面中特定部分数据
  • 判断用户提交的邮箱的格式是否正确 等等等等
    那么我们就要了解元字符

二、正则表达式的案例

1、案例一:匹配账号和密码

账号要求:

1.用户名只能包含数字 字母 下划线

2.不能以数字开头

3.⻓度在 6 到 16 位范围内

import res = 'xzq_2234w'result = re.match('^[a-z_][a-z\d_]{5,15}$', s)
print(result)  # <re.Match object; span=(0, 10), match='1587022xzq'>

因为账号是从头到尾的,只需要匹配一次就行,所以我们可以使用match方法

密码要求:

1.不能包含!@#¥%^&*这些特殊符号

2.必须以字母开头

3.⻓度在 6 到 12 位范围内

s = 'xzq_2234w'
result = re.match(r'[a-z][^!@#¥%^&*]{5,11}', s)
print(result)

2、案例二:匹配QQ号码

要求: QQ号码的长度一般是5~10位, 全部都是数字,第一位不能是0

s = '10086111222'
# 5 - 11 位
result = re.match(r'[1-9]\d{4,10}$', s)
print(result)  # <re.Match object; span=(0, 11), match='10086111222'>

3、案例三:检索所有的python源代码文件

要求: python文件名是一个整体,包含字母,数字和下划线_ 。

s = '1.py 2.png ssx.csv qaq.txt xzq.py'
#文件名格式:  (数字字母_).py
result = re.findall(r'\w+\.py\b', s)
print(result)	# ['1.py', 'xzq.py']

4、案例四:验证邮箱地址

要求:邮箱地址验证,必须是网易邮箱或者是QQ邮箱。邮箱地址中必须有@,而且@符号前面至少5位,最多10位。

# 验证输入的邮箱 163 126 qq 前面至少五位,至多11位
email = '738473800@qq.com'
result = re.match(r'\w{5,11}@(163|126|qq)\.(com|cn)$', email)
print(result)  # <re.Match object; span=(0, 16), match='738473800@qq.com'>

5、案例五:匹配座机号码

要求:座机号码必须是:区号-号码,而且区号包含3或者4位,号码一定是8位

phone = '010-12345678'
result = re.match(r'(\d{3}|\d{4})-(\d{8})$', phone)
print(result)  # <re.Match object; span=(0, 12), match='010-12345678'>
print(result.group())  # 010-12345678
print(result.group(1))  # 010
print(result.group(2))  # 12345678

6、案例六:匹配html标签中的内容

要求:只提取合法标签中的内容,标签不要

# 爬虫
s = '<html>hello</h1>'
s2 = '<html>hello</html>'
result = re.match(r'<([0-9A-z]+)>(.+)</\1>$', s)
print(result)  # None
result = re.match(r'<([0-9A-z]+)>(.+)</\1>$', s2)
print(result)  # <re.Match object; span=(0, 18), match='<html>hello</html>'>
print(result.group(1))  # html
print(result.group(2))  # hello分组取名
# 取名字 (?P<名字>正则) (?P=名字)
s = '<html>hello</h1>'
s2 = '<html>hello</html>'
result = re.match(r'<(?P<name1>\w+)>(.+)</(?P=name1)>$', s)
print(result)  # None
result = re.match(r'<(?P<name1>\w+)>(?P<msg>.+)</(?P=name1)>$', s2)
print(result)  # <re.Match object; span=(0, 18), match='<html>hello</html>'>
print(result.group('name1'))  # html
print(result.group('msg'))  # hello

7、案例七:提取数字并计算

邀请:提取一个包含有数值的字符串中的数值 (数值包括正负数, 还包括整数和小数在内) 并求和。

例如:“-3.14good87nice19bye” =====> -3.14 + 87 + 19 = 102.86

import re
from functools import reduces = '-3.14good87nice19bye'
nums = re.findall(r'-?\d+\.?\d*', s)
result = reduce(lambda x, item: x + float(item), nums, 0)
print(result)

8、案例八:匹配整数或者小数

要求: 匹配字符串是否,是整数或者小数,包含(正数或者负数,正数前面可以+,也可以没有)

s = '-3.14'
result = re.fullmatch(r'[+-]?(0|[1-9]\d*)(\.\d+)?', s)print(result)

[0-9a-z] ==(0-9a-z)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/827000.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker打包部署自己的应用

docker部署应用 当谈及使用 Docker 进行容器化部署应用时&#xff0c;可以想象它是一个能够将整个应用程序及其所有依赖项打包成一个独立、可移植的容器的工具。这个容器不仅包含了应用代码&#xff0c;还包括了操作系统、运行时环境以及所有依赖的库和组件。这样一来&#xf…

双工结构(duplex construction)

参考文献&#xff1a; [BDPV11] Bertoni G, Daemen J, Peeters M, et al. Duplexing the sponge: single-pass authenticated encryption and other applications[C]//Selected Areas in Cryptography: 18th International Workshop, SAC 2011, Toronto, ON, Canada, August 1…

mybatis创建入门流程体验

mysql数据库中建表 drop table if exists tb_user;create table tb_user(id int primary key auto_increment,username varchar(20),password varchar(20),gender char(1),addr varchar(30) );INSERT INTO tb_user VALUES (1, zhangsan, 123, 男, 北京); INSERT INTO tb_user …

星域社区原版APP源码/社区交友App源码/动态圈子群聊php源码

简介 初始版本是由RuleAPP规则之树开发的&#xff0c;而星域社区则是在此基础上进行了二次开发和美化。作者花了近一年的时间来打磨它&#xff0c;现在即将推出Pro版。如果你只想免费使用的话&#xff0c;可以使用原始的RuleAPP版本。但是&#xff0c;如果你想要获得更好的美观…

【YOLOv9】实战二:手把手教你使用TensorRT实现YOLOv9实时目标检测(含源码)

‍‍&#x1f3e1;博客主页&#xff1a; virobotics(仪酷智能)&#xff1a;LabVIEW深度学习、人工智能博主 &#x1f384;所属专栏&#xff1a;『LabVIEW深度学习实战』 &#x1f4d1;上期文章&#xff1a;『【YOLOv9】实战一&#xff1a;在 Windows 上使用LabVIEW OpenVINO工具…

CTF工具处理(2)--HackBar报错

来源&#xff1a;HackBar插件绕许可_hackbar许可证-CSDN博客 报错页面&#xff1a; 工具报错原因&#xff1a; 版本升级&#xff0c;需要收费。 破解&#xff1a; 1.下载文件&#xff08;去网上找破解HackBar&#xff09; 2.添加附件&#xff1a; 3.重启&#xff1a; 按F12就…

引领4G拾音新时代:DuDuTalk双定向拾音设备上市,助力现场管理步入智能化

近日&#xff0c;继DuDuTalk的4G智能拾音工牌&#xff08;挂牌和胸牌&#xff09;之后&#xff0c;赛思云科技在线下沟通场景智能语音采集方案领域的又一突破性产品4G双定向桌面拾音终端全新上市。 该产品是面向营业网点、市政大厅、医疗诊室、售票窗口、贵宾室等环境的柜台服…

【工具-pip】

工具-pip ■ pip-工具■ pip-安装■ pip-卸载■ pip-帮助■ pip- 批量安装库■ 批量卸载库■ 提高pip下载速度 ■ pip-工具 pip 是 Python 标准库中的一个包&#xff0c;这个包是用来管理 Python 第三方库。 通用的 Python 包管理工具。提供了对 Python 包的查找、下载、安装、…

cesium 动态线效果

一、扩展材质 function PolylineTrailMaterial(options) {options Cesium.defaultValue(options, Cesium.defaultValue.EMPTY_OBJECT);this._definitionChanged new Cesium.Event();// 变量初始化this.color Cesium.defaultValue(options.color && new Cesium.Colo…

基于区间预测的调度方法

《基于区间预测的光伏发电与蓄电池优化调度方法》 为了应对县级市光伏发电与用电需求之间的最优调度问题&#xff0c;提出一种面向蓄电池和光伏发电机的区间预测调度优化方法。该方法分别对发电功率调度、充电/放电功率调度和荷电状态调度进行决策从而获得最优调度的精确范围。…

Python Flask Web框架快速入门

Flask 入门Demo Flask 开发环境搭建&#xff0c;执行如下指令&#xff1a; pip install flask # 第一节: Flask 快速入门from flask import Flask app Flask(__name__)app.route(/flask) def hello_flask():return Hello Flaskapp.run() 核心代码剖析&#xff1a; 从 fla…

RTSP/Onvif视频监控平台EasyNVR如何提高匿名用户的用户名和密码安全性?

EasyNVR安防视频云平台是旭帆科技TSINGSEE青犀旗下支持RTSP/Onvif协议接入的安防监控流媒体视频云平台。平台具备视频实时监控直播、云端录像、云存储、录像检索与回看、告警等视频能力&#xff0c;能对接入的视频流进行处理与多端分发&#xff0c;包括RTSP、RTMP、HTTP-FLV、W…

Nginx+Lua+OpenResty(详解及使用)

一、 Nginx简介 Nginx是一个高性能的Web服务器和反向代理的软件。 Web服务器&#xff1a;就是运行我们web服务的容器&#xff0c;提供web功能&#xff0c;还有tomcat也提供类似的功能。 代理是软件架构和网络设计中&#xff0c;非常重要的一个概念。 二、Nginx的反向代理&…

flutter 谷歌的苹果系统消息推送

flutter firebase 云消息通知教程 (android-安卓、ios-苹果) Android、ReactNative、Flutter集成Firebase推送注意事项 Android&#xff1a;Firebase 凭据 iOS&#xff1a;基于 p8 令牌的 APN 连接 iOS&#xff1a;p12 生成证书 Flutter之对接国外推送onesignal踩坑笔记&a…

0.C++入门(专栏前言)

目录 1.什么是C 2.C的发展史 3.C的重要性 应用&#xff1a; 4.如何学习C 5.关于本专栏 1.什么是C 20世纪80年代&#xff0c;计算机界提出oop(object oriented programming:面向对象&#xff09;思想&#xff0c;支持面向对象的程序设计应运而生。 1982年&#xff0c;本…

Java实现文件分片上传、大文件秒传

Java实现文件分片上传、大文件秒传&#xff0c;大文件如何做断点续传&#xff1f;JAVAWEB 文件上传及下载&#xff0c;JAVA大文件上传&#xff0c;大文件下载解决方案&#xff0c;JAVA实现文件分片上传并且断点续传&#xff0c;JAVA大文件分片上传/多线程上传功能&#xff0c;超…

JS-47-Node.js06-fs模块-读写文件

Node.js内置的fs模块就是文件系统模块&#xff0c;负责读写文件。 和所有其它JavaScript模块不同的是&#xff0c;fs模块同时提供了异步和同步的方法。 一、回顾&#xff1a;异步方法VS同步方法 1-1、异步方法 因为JavaScript的单线程模型&#xff0c;执行IO操作时&#xff…

STP学习的第一篇

1.STP的基本概念&#xff1a;根桥 &#xff08;1&#xff09;STP的主要作用之一是在整个交换网络中计算出一棵无环的“树”&#xff08;STP树&#xff09;。 &#xff08;2&#xff09;根桥是一个STP交换网络中的“树根”。 &#xff08;3&#xff09;STP开始工作后&#xf…

【C++类和对象】初始化列表与隐式类型转换

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

《C语言深度解剖》(8):一篇文章彻底学会Visual Studio 调试技巧,新手必看!

&#x1f921;博客主页&#xff1a;醉竺 &#x1f970;本文专栏&#xff1a;《C语言深度解剖》 &#x1f63b;欢迎关注&#xff1a;感谢大家的点赞评论关注&#xff0c;祝您学有所成&#xff01; ✨✨&#x1f49c;&#x1f49b;想要学习更多数据结构与算法点击专栏链接查看&am…