Python 从入门到实战16(正则表达式语法)

        我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。

上篇文章我们通过举例学习了字符串一些操作说明。今天讨论一下正则表达式的语法。也是经常会用到的。

1、正则表达式简介

正则表达式:regular expression ,简称:regex 或者RE,又称规则表达式,它不是某种语言所特有的。

在处理字符串时,经常会涉及查找符合某些复杂规则的字符串,正则表达式就是描述这些规则的工具。

正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。

2、行定位符

行定位符用来描述字符串的边界。“^”表示行的开始,“$”表示行的结尾。

如: ^tm

表示:要匹配的字符串tm开头,如tm1234  可以匹配,若是TOtm123就不匹配

如:tm$   表示以tm结尾

3、元字符说明

上面所讲到的“^”和“$”就属于元字符,还有其它:

元字符

说明

元字符

说明

.

匹配除换行符以外的任意字符

\b

匹配单词的的开始或者结束

\w

匹配字母、数字、下划线或汉字

^

匹配字符串的开始

\s

匹配任意的空白符

$

匹配字符串的结束

\d

匹配数字

举个例子: \bbaidu\w*\b  ,这里是匹配以字母baidu开头的字母,然后\w 为任意的字母或者数字、或者汉字等,*这里指任意数量,就是限定符

4、限定符的说明

上面的例子\w*  是匹配任意数量的数字或者字母。若是想匹配特定说了的数字,该如何表示呢?如匹配10位的qq 号:  ^\d{10}$

下面列出常用的限定符:

限定符

说明

举例

匹配前面的字符0次或者一次

 your? 表达式匹配your ,也匹配youa

+

匹配前面的字符1次或者多次

go+gle 匹配gogle 到goo…gle

*

匹配前面的字符0次或者多次

go*gle 匹配ggle 到goo…gle

{n}

匹配前面的字符n次

go{2}gle 只匹配google

{n,}

匹配前面的字符n次或以上

go{2}gle 匹配google 到goo…gle

{n,m}

匹配前面的字符n次d到m次

go{2,4}gle匹配google 、gooogle、goooogle

5、字符类的匹配

没有预定义元字符的字符集合如何进行匹配呢?如含有某些特定的字母如元音字母:a\e\i\o\u,可以直接用方括号来匹配,如[]a,e,I,o,u]

如:[0-9]代表的含义和\d是一致的

6、排除字符

不符合某些字符可以使用[^+字母表示]

如:[^a-z A-Z] 表示排查字母的意思

7、选择字符

若是包含多个条件进行选择的逻辑,怎么书写表达式呢?可以使用|来连接

如:身份证的表达式

(^\d{15}$)|(^\d{18}$)|(^\d{17})(\d|x|X$)  即表示身份证由15个数字,或者18个纯数字,或者17个数字+x或者加X   进行匹配

8、转义字符:\

为什么要用到转义字符?如我们要使用IP地址,用正则表达式匹配127.0.0.1这样的格式。当然,我们不能直接使用“.”,因为“.”是元字符可以匹配除换行符意外的任意字符。

需要使用转义字符“\”,正则式:

[1-9]{1-3}\.[0-9]{1-3}\.[0-9] {1-3}\.[0-9] {1-3}

9、分组

分组可以使用括号()来实现,如上面的匹配127.0.0.1的例子

[1-9]{1-3}\.[0-9]{1-3}\.[0-9] {1-3}\.[0-9] {1-3}

可以改写成:[1-9]{1-3}(\.[0-9]{1-3}){3}

上面的例子就达到了分组,也即是子表达式。

(\.[0-9]{1-3}){3}  :即为对分组(\.[0-9]{1-3})  重复了三次操作

10、python 中使用正则式语法

在python中使用正则表达式时,将其作为模式字符串使用的。例如,匹配一个非字母字符的正则表达式转换为模式字符串:’[^a-z A-Z]’

若是匹配以p开头的单词的正则表达式转换为模式字符串,

如写成:’\bp\w*\b’  这个表达显然时不正确的,因为没有进行转义(’\\bp\\w*\\b’)。

为了避免大量的转义字符要写,python中可以写成原生字符串,即在模式字符串前加r或者R。如上面的例子:’\\bp\\w*\\b’  >写成  r’\bp\w*\b’  即可。

今天先写学习到这里了,每天进步一点点。今天也要加油啊!

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

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

相关文章

RDMA应用场景及效果

GPU Direct 参考:网络架构如何支持超万卡的大规模 AI 训练?| AICon_芯片与网络_InfoQ精选文章 GPU 网络的情况已经发生了很大变化。每个 GPU 都有自己的内部互联,例如 NVIDIA 的 A100 或 H800,它们内部的 NVLink 互联可以达到 6…

【Kubernetes】常见面试题汇总(六)

目录 17.简述 kube-proxy ipvs 和 iptables 的异同? 18.简述 Kubernetes 中什么是静态 Pod? 19.简述Kubernetes中 Pod 可能位于的状态? 17.简述 kube-proxy ipvs 和 iptables 的异同? (1)iptables 与 IP…

单个 java 虚拟机 生产者消费者

一、通过 java.lang.Object#wait(),java.lang.Object#notify,java.lang.Object#notifyAll来实现 生产者,消费者 public abstract class Goods {protected String type;protected String goodName;protected int number;public abstract …

【Authing身份云-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…

EP10 全局渐变背景色

文件路径: E:/homework/uniappv3tswallpaper/common/style/common-style.scss view,swiper,swiper-item{box-sizing: border-box; } .pageBg{background: linear-gradient(to bottom,rgba(0,0,0,0.2),white 35%),linear-gradient(to right,#A6E3D7 30%,#FFE1F2);mi…

香港打工人√三天通过微软mos认证

在繁忙的香港,时间就是金钱,效率就是生命。作为一名香港的打工人,在这座竞争激烈的城市中,不断提升自我是保持竞争力的关键。最近,我完成了一项挑战:在短短三天内通过微软MOS认证大师。以下是我备考的经验分…

微调大模型:提高其代码修复能力的尝试

目录 一、作品背景: 二、作品目标: 三、作品技术方案: (1)标记化 (2)量化 (3) LoRA(低秩自适应)配置 (4)训练配置 (6)模型保存 四、作品效果: 一、作品背景: 随着大型模型技术的日益成…

c#语言写一个数组排序函数

在C#中,有多种方式可以编写一个数组排序函数。最直接和常用的方式之一是利用.NET Framework内置的Array.Sort()方法,但如果你想要自己实现排序算法来加深理解,下面我将提供一个简单的冒泡排序算法示例。 冒泡排序是一种简单的排序算法&#…

SOMEIP_ETS_107: SD_Consider_Entries_Order

测试目的: 验证DUT在接收到包含两个条目的消息时,能够按照正确的顺序处理:首先是带有TTL 0的SubscribeEventgroup以删除订阅,然后是常规的SubscribeEventgroup以重新订阅。 描述 本测试用例旨在确保DUT能够正确处理订阅消息的顺…

Frida0C - Module相关API

亲爱的读者你们好啊,今天主要分享一下 frida 相关的学习文档,见文章最后一节。 Module var module Process.findModuleByAddress(Module.findBaseAddress("libc.so")) module.enumerateSymbols()enumerateSymbols 返回该 so 的符号表。 还…

Java项目: 基于SpringBoot+mybatis+maven医院管理系统(含源码+数据库+任务书+开题报告+毕业论文)

一、项目简介 本项目是一套基于SpringBootmybatismaven医院管理系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单、…

ffmpeg安装测试(支持cuda支持SRT)

文章目录 背景安装ffmpeg直接下载可执行文件选择版本选择对应系统版本下载测试Linux下安装 查看支持协议以及编码格式 常见错误缺少 libmvec.so.1LD_LIBRARY_PATH 错误 GPU加速测试SRT服务器搭建下载srs5.0源码解压安装配置启动 SRT推流测试SRT播放测试 背景 在音视频开发测试中…

视频监控管理平台LntonAIServer视频智能分析抖动检测算法应用场景

在视频监控系统中,视频画面的稳定性对于确保监控效果至关重要。抖动现象是指视频画面中存在不稳定或频繁晃动的情况,这可能会影响视频的清晰度和可读性。LntonAIServer通过引入抖动检测功能,帮助用户及时发现并解决视频流中的抖动问题&#x…

如何在Oracle中实现数据的加密

在Oracle数据库中实现数据加密是一项重要的安全措施,它可以保护存储在数据库中的敏感信息不被未授权访问。Oracle提供了多种数据加密方法,包括透明数据加密(TDE)、列级加密和使用内置加密函数等。以下是一些在Oracle中实现数据加密…

【Python】从基础到进阶(七):深入理解Python中的异常处理与调试技巧

🔥 个人主页:空白诗 文章目录 一、引言二、异常处理概述1. 什么是异常?2. 异常的捕获与处理 三、常见的异常类型四、自定义异常五、调试与日志记录1. 使用assert进行调试2. 使用日志记录 六、案例:文件操作与异常处理1. 需求分析2…

最新kubernetes的安装填坑之旅(新手篇)

Kubernetes(常简称为 K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序,lz也不知道哪根脑经秀逗了,竟然妄挑战学习一下,结果折戟沉沙,被折腾的欲仙欲死,不过…

写的一致性问题之双删模式

文章目录 1、双删模式1.1、同步双删1.2、异步双删1.3、延时双删1.4、定时双删 在事务提交前后删除两次redis,会有性能问题 企业开发常用:延时双删、异步双删 1、双删模式 1.1、同步双删 实现思路:AOP 1.2、异步双删 在事务提交之后异步删除r…

【Python爬虫】利用爬虫抓取双色球开奖号码,获取完整数据并通过随机森林和多层感知两种模型进行简单的预测

首先我们需要通过爬虫获取往期双色球号码并将其保存在csv文件中,这里我获取了1000期的数据,时间很久,大家可以修改代码少收集一些做尝试! import requests import os from bs4 import BeautifulSoup import csv import timedef d…

redis群集的三种模式

目录 一、redis群集有三种模式 二、redis主从复制 2.1 概念 2.2 主从复制的作用 2.3 主从复制流程 三、搭建redis主从复制 四、redis哨兵模式 4.1 概念 4.2 哨兵模式原理: 4.3 哨兵模式的作用: 4.4 故障转移机制: 4.5 主节点的选举&#xff…

Day15笔记-函数返回值函数的封装匿名函数

一、函数基础【重点掌握】 1.关键字参数和不定长参数 # 1.关键字参数 # 注意:默认参数主要体现在函数的定义中【声明】,关键字参数主要体现在函数的调用中 def func1(a,b,c):print(11111,a,b,c) # 必须参数的缺点:必须按照顺序传参&#xff…