Python学习基础笔记三十二——正则表达式

news2025/1/12 6:00:55

官方定义:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特殊字符、及这些特定字符的组合,组成一个“规则字符串”,这个规则字符串用来表达对字符串的一种过滤逻辑。

1、在Linux运维中,vi、grep、awk和sed这些工具,都是可以用来作为正则表达式的字符串处理的。

import re

phone_number = input("Please input your phone number: ")

if re.match('0?(13|14|15|17|18|19)[0-9]{9}', phone_number):
    print('是合法的手机号码')
else:
    print('不是合法的手机号码')

2、我们可以从网上获得常用的正则表达式,如果我们需要写自己的正则表达式,那就需要系统地进行学习。

3、字符组:只能匹配一位

正则
待匹配字符
匹配
结果
说明
[0123456789]
8
True
在一个字符组里枚举合法的所有字符,字符组里的任意一个字符
和"待匹配字符"相同都视为可以匹配
[0123456789]
a
False
由于字符组中没有"a"字符,所以不能匹配
 
[0-9]
 
7
True
也可以用-表示范围,[0-9]就和[0123456789]是一个意思
 
[a-z]
 
s
 
True
 
同样的如果要匹配所有的小写字母,直接用[a-z]就可以表示
 
[A-Z]
 
B
 
True
 
[A-Z]就表示所有的大写字母
 
[0-9a-fA-F]
 
e
 
True
 
可以匹配数字,大小写形式的a~f,用来验证十六进制字符

4、字符:

元字符匹配内容
.匹配除换行符以外的任意字符
\w匹配字母或数字或下划线
\s匹配任意的空白符
\d匹配数字
\n匹配一个换行符
\t匹配一个制表符
\b匹配一个单词的结尾
^匹配字符串的开始
$匹配字符串的结尾
\W匹配非字母或数字或下划线
\D匹配非数字
\S匹配非空白符
a|b匹配字符a或字符b
()匹配括号内的表达式,也表示一个组
[...]匹配字符组中的字符
[^...]匹配除了字符组中字符的所有字符

例:

([abc][123])+

 

5、量词:

量词用法说明
*重复零次或更多次,贪婪匹配
+重复一次或更多次
重复零次或一次,惰性匹配
{n}重复n次
{n, }重复n次,或更多次
{n, m}重复n次到m次

说明:*号、+号和?号三者之间的关系。这个量词只约束之前紧贴这它的一个字符。

在linux命令中,我们需要将{}符号进行转义,Shell才能识别。例如:

grep -n 'go\{2,\}g' regular_express.txt

grep -n 'go\{2,5\}g' regular_express.txt

egrep -n 'go{2,}g' regular_express.txt

egrep -n 'go{2,5}g' regular_express.txt

6、.^$

正则待匹配字符匹配
结果
说明
海.海燕海娇海东海燕海娇海东  匹配所有"海."的字符
^海.海燕海娇海东海燕只从开头匹配"海."
  海.$  海燕海娇海东海东只匹配结尾的"海.$"

 

7、*+?{}

正则待匹配字符匹配
结果
说明
李.?李杰和李莲英和李二棍子

李杰
李莲
李二

 
?表示重复零次或一次,即只匹配"李"后面一个任意字符
李.*李杰和李莲英和李二棍子李杰和李莲英和李二棍子
*表示重复零次或多次,即匹配"李"后面0或多个任意字符
李.+李杰和李莲英和李二棍子李杰和李莲英和李二棍子
+表示重复一次或多次,即只匹配"李"后面1个或多个任意字符
李.{1,2}李杰和李莲英和李二棍子

李杰和
李莲英
李二棍

{1,2}匹配1到2次任意字符

 

正则待匹配字符匹配
结果
说明
李.*?李杰和李莲英和李二棍子

惰性匹配

说明:?是非贪婪。?放在量词后面就是非贪婪匹配。上图说明:*号是能重复零次或者更多次,加了?号,就是非贪婪匹配,就是惰性匹配,只匹配零次。.号是代表任意字符,在李字字符后只有个任意字符,惰性匹配让这个任意字符只匹配零次,所以是任意字符不显示。那就只显示李字字符。

8、字符集[] [^]:

正则待匹配字符匹配
结果
说明
李[杰莲英二棍子]*李杰和李莲英和李二棍子

李杰
李莲英
李二棍子

 
表示匹配"李"字后面[杰莲英二棍子]的字符任意次
李[^和]*李杰和李莲英和李二棍子

李杰
李莲英
李二棍子

表示匹配一个不是"和"的字符任意次
[\d]456bdha3

4
5
6
3

表示匹配任意一个数字,匹配到4个结果
[\d]+456bdha3

456
3

表示匹配任意个数字,匹配到2个结果

 9、分组() 与 或 | [^]:

身份证号码是一个长度为15或18个字符的字符串,如果是15位则全部由数字组成,首位不能为0;如果是18位,则前17位全部是数字,末位可能是数字或x,下面我们尝试用正则来表示:

正则待匹配字符匹配
结果
说明
^[1-9]\d{13,16}[0-9x]$110101198001017032

110101198001017032

   表示可以匹配一个正确的身份证号
^[1-9]\d{13,16}[0-9x]$1101011980010170

1101011980010170

表示也可以匹配这串数字,但这并不是一个正确的身份证号码,它是一个16位的数字
^[1-9]\d{14}(\d{2}[0-9x])?$1101011980010170

False

现在不会匹配错误的身份证号了
()表示分组,将\d{2}[0-9x]分成一组,就可以整体约束他们出现的次数为0-1次
^([1-9]\d{16}[0-9x]|[1-9]\d{14})$110105199812067023

110105199812067023

表示先匹配[1-9]\d{16}[0-9x]如果没有匹配上就匹配[1-9]\d{14}

10、转义符:

正则待匹配字符匹配
结果
说明
\n\n False
因为在正则表达式中\是有特殊意义的字符,所以要匹配\n本身,用表达式\n无法匹配
\\n\n True
转义\之后变成\\,即可匹配
"\\\\n"'\\n' True
如果在python中,字符串中的'\'也需要转义,所以每一个字符串'\'又需要转义一次
r'\\n'r'\n' True
在字符串之前加r,让整个字符串不转义

 说明:r就是real的意思,就是真实的意思,不转义。

11、贪婪匹配:

正则待匹配字符匹配
结果
说明
<.*>

<script>...<script>

<script>...<script>
默认为贪婪匹配模式,会匹配尽量长的字符串
<.*?>r'\d' 

<script>
<script>

加上?为将贪婪匹配模式转为非贪婪匹配模式,会匹配尽量短的字符串

12、几个常用的贪婪模式: 

*? 重复任意次,但尽可能少重复

+? 重复1次或更多次,但尽可能少重复

?? 重复0次或1次,但尽可能少重复

{n,m}? 重复n到m次,但尽可能少重复

{n,}? 重复n次以上,但尽可能少重复

 

13、.*?的用法:

. 是任意字符
* 是取 0 至 无限长度
? 是非贪婪模式。
何在一起就是 取尽量少的任意字符,一般不会这么单独写,他大多用在:
.*?x

就是取前面任意长度的字符,直到一个x出现

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

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

相关文章

fiddler使用的作用与常见应用场景

Fiddler工具的工作原理 1.本地应用与服务器之间所有的Request 和Response都将经过Fiddler&#xff0c;由Fiddler进行转发&#xff0c;此时Fiddler以代理服务器的方式存在。 2.由于所有的网络数据都会经过Fiddler&#xff0c;因此Fiddler能够截获这些数据&#xff0c;实现网络…

美团四面 Java 岗,终获 offer,我是这么回答面试官的

前言 经历了 10 月的疫情挣扎与 11 月失业的煎熬&#xff0c;终于来到了春末的 12 月&#xff0c;内心的压力也稍稍的松懈了一些&#xff0c;终于可以放心找个工作了&#xff0c;可是随着的等待面试的机会的越来越少&#xff0c;这份焦虑反而越来越大&#xff0c;也偶尔会想&a…

稳定性建设之JavaScript代码不能被阻断

稳定性建设之JavaScript代码不能被阻断 背景 js代码可能会因为某些原因&#xff0c;导致出错&#xff0c;进而整个后续代码有可能都被阻断。直接影响线上的稳定性 最常见的js被阻断的情况 console.log(111) // 预期 a {} // 结果 a undefined a.a 1 console.log(222) // …

Pycharm的简单介绍以及api的使用

一、什么是Pycharm&#xff1f; Pycharm是一种python IDE&#xff0c;带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具&#xff0c;比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、脚本控制。此外&#xff0c;该IDE提供了一些高级功…

MyBatis-Plus中自动填充功能的用法

系列文章目录 Mybatis-PlusSpringBoot结合运用_心态还需努力呀的博客-CSDN博客MyBaits-Plus中TableField和TableId用法_心态还需努力呀的博客-CSDN博客 MyBatis-Plus之ActiveRecord[基础增删改查操作]_心态还需努力呀的博客-CSDN博客 MyBatis-Plus分页查询&#xff08;快速上…

【JavaWeb开发-Servlet】day06-学生成绩管理系统-实现分页功能

目录 一、前端设计 二、分页功能 ①创建实体层 ②在DAO层新建两个方法 ③编写业务层 ④实现Servlet层 ⑤修改前端页面 ⑥测试 ⑦思路 ⑧扩展 一、前端设计 原来的前端非常简陋&#xff0c;没有明显的突出其功能&#xff0c;下面将对前端页面进行新的完善。 写一个标题…

HPPH-DSPE-PEG/NH2/MAL光克洛-磷脂-聚乙二醇/光克洛-聚乙二醇-氨基/马来酰亚胺

小编今天和大家一起来学习HPPH-DSPE-PEG/NH2/MAL光克洛-磷脂-聚乙二醇/光克洛-聚乙二醇-氨基/马来酰亚胺相关研究内容! 光克洛&#xff0c;第二代的光敏剂&#xff0c;可用于光动力疗法 (PDT)&#xff0c;基本结构为二氢卟吩类化合物。美国研究人员从绿色植物中提取、纯化&…

nginx笔记

作者&#xff1a;ThinkStu 文章目录一、简介二、常用配置1、listen2、server_name3、location4、sendfile5、nodelay/push6、add_header7、set 变量8、if9、return10、keepalive三、常用操作1、Gzip压缩2、正则表达式3、rewrite重写4、rewrite范例5、跨域6、防盗链7、适配移动设…

R语言数据可视化分析案例:探索BRFSS数据

最近我们被客户要求撰写关于BRFSS数据的研究报告&#xff0c;包括一些图形和统计输出。 加载包 library(tidyr) library(knitr) opts_chunk$set(echo TRUE, fig.align "center") 载入资料 load("brfss2013.RData")第1部分&#xff1a;数据 描述如何收…

Spring Boot ActuatorAdmin

Spring Boot Actuator&Admin 指标监控简介 干嘛的&#xff1a; 主要运用在微服务架构&#xff0c;所以我建议你先学微服务&#xff0c;否则可能get不到它的用处&#xff0c;只有大型的分布式系统才会用到指标监控… Why&#xff1a;&#xff1f; 对于一个大型的几十个、…

低代码如何自定义主题?一文教会你

SuccAP低代码开发平台&#xff0c;除了提供了多主题供选择外&#xff0c;还支持自定义报表主题&#xff0c;当系统自带的主题无法满足项目需求时&#xff0c;可以根据项目设计并新增主题&#xff0c;本文将介绍如何去新增自定义主题。 新增自定义主题可按如下步骤操作&#xf…

APS高级计划排程在乳制品行业的应用

目前乳制品行业供应链管理中存在的主要问题 生产盲目性&#xff0c;应对市场变化能力不足。现如今牛奶已经成为人们日常饮食需求的必需品&#xff0c;很多生产厂家就开始大量的生产&#xff0c;全然不顾市场的需求度&#xff0c;应对市场变化的能力不足&#xff0c;导致了有一…

计算机毕业设计ssm+vue基本微信小程序的心理服务平台 uniapp 小程序

项目介绍 随着计算机技术的发展,带来社会各行业的进步,信息化逐渐运用到人们的生活中。传统模式的青少年心理健康管理满足不了现代人的生活追求,服务质量、服务速度,之前的很多网站由于功能、或者框架设计等原因,无法完美的展现它的特色,优势,浪费了很多资源。使用管理系统进行…

今天步行数5000多

今天步行数量比较多的&#xff0c;有五千多步吧&#xff0c;希望明天能继续保持下去。

企业知识分享系统的设计与实现

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&…

两种方案解决vscode浏览器跨域问题

一、 问题 1.1 在接收 json 数据的时候出现了以下错误&#xff1b; 打开测试用的 json 文件发现数据并没有问题&#xff0c;而第一个报错可以看到 Cross origin requests are only supported for protocol schemes&#xff1a;… &#xff0c;也就是说所使用的数据不在跨域的许…

毕业后5年,我终于变成了月薪13000的软件测试工程师

目录 我为什么选择转行 工作环境 我选择了转行软件测试 写在最后 《软件测试工程师发展规划路线》 一、测试基础 了解测试的基础技能&#xff0c;掌握主流缺陷管理工具的使用&#xff0c;熟练测试环境的操作与运维 二、Linux必备知识 Linux作为现在最流行的软件环境系…

场景案例│数字员工助力医疗行业打通信息系统壁垒,实现高效率运营

据埃森哲研究预测&#xff0c;到2026年人工智能技术每年将为医疗保健行业节省1500亿美元。 随着人们对数字化的需求日益增长&#xff0c;数字技术成为转型升级的新兴力量&#xff0c;许多医疗机构积极采用数字员工推进数字化转型的步伐。 在数字员工的支持下&#xff0c;医疗…

Redis Replication

高可用架构-Redis Replication 今天学习下如何基于Redis 复制功能构建高可用架构-主从复制&#xff0c;Redis Replication 支持数据复制和故障切换。Redis复制是允许Redis实例完全复制主实例的过程。默认情况下&#xff0c;复制是一个异步过程。Redis复制在主机端和副本端都是…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java毕业设计选题档案管理系统bvr3c

毕业设计其实不难&#xff0c;主要毕业的时候任务太紧了&#xff0c;所以大家都非常忙没有时间去做&#xff0c;毕业设计还是早做准备比较好&#xff0c;多花点时间也可以做出来的&#xff0c;建议还是自己动手去做&#xff0c;比如先选一个题&#xff0c;这样就有方向&#xf…