当前位置: 首页 > news >正文

Python----Python高级(正则表达式:语法规则,re库)

一、正则表达式

1.1、概念

        正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、 regexp或RE),是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特 殊字符(称为"元字符")。

        正则表达式使用单个字符串来描述、匹配一系列符合某个 句法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。通俗 的说,正则表达式就是一种语法规则,用来匹配文本中的文本。

正则表达式非常强大,不仅在UNIX系统中应用广泛,近二十年来,在Windows系统 中也得到极大的发展,现如今主流的操作系统包括Linux、Unix、Windows和主流的 开发语言包括C/C++、Java、JavaScript、C#、Python、Go、PHP等。

1.2、特点 

缺点:

        正则表达式的语法可读性差

优点:
        正则表达式通用行很强,能够适用于很多编程语言

二、语法规则 

2.1、匹配什么字符

代码功能
.匹配任意1个字符(除了\n)
[ ]匹配[ ]中列举的字符
\d匹配数字,即0-9
\D匹配非数字,即不是数字
\s匹配空白,即 空格,tab键
\S匹配非空白
\w匹配非特殊字符,即a-z、A-Z、0-9、_、汉字
\W匹配特殊字符,即非字母、非数字、非汉字

2.2、匹配多少次

代码功能
*匹配前一个字符出现0次或者无限次,即可有可无
+匹配前一个字符出现1次或者无限次,即至少有1次
?匹配前一个字符出现1次或者0次,即要么有1次,要么没有
{m}匹配前一个字符出现m次
{m,n}匹配前一个字符出现从m到n次
{n,}匹配前一个字符出现n次以上

2.3、在哪里匹配

代码功能
^匹配字符串开头
$匹配字符串结尾
\b表示匹配单词边界。(比如\bword,可以匹配word、words,但不会匹配 sword)

2.4、匹配指定格式的字符

1. 使用()匹配指定格式的字符

(ab):表示在文本中只匹配ab这两个字符,且必须相邻

(a|b):表示在文本中匹配a或者b这两个字符,不一定相邻。

2. 使用[]匹配指定类别的字符串

[abcd]:表示匹配a或匹配b或匹配c或匹配d

[a-d]:表示匹配a或匹配b或匹配c或匹配d

[a-zA-Z0-9]:表示匹配所有的大小写英文和数字

[^0-9]:表示匹配除了数字之外的所有字符

2.5、单行模式与多行模式

1. 单行模式:

        在单行模式下,.可以匹配任何的字符,包括换行符,并且整个文本会 被认为是一个完整的文本,使用^和$只能匹配到文本的开头和结尾。

2. 多行模式:

        在多行模式下,.就不可以匹配换行符了,使用^和$可以匹配到每一行 的开始和结束。

2.6、贪婪匹配与懒惰匹配

1. 贪婪模式:指在正则表达式中的量词会尽可能多地匹配字符。

2. 懒惰模式:指在正则表达式中的量词会尽可能少地匹配字符。

2.7、?的几种用法

1. ?作为限定符,表示其修饰对象只能出现0次或1次。

2. ?放在量词前,表示将匹配模式改为懒惰匹配模式。

3. (?=pattern):表示匹配位置后面必须跟着pattern模式的字符,匹配结果并不 包括这个模式的字符串。

4. (?!pattern):表示匹配位置后面不能跟着pattern模式的字符,匹配结果并不 包括这个模式的字符串。

5. (?<=pattern):表示匹配位置前面必须跟着pattern模式的字符,匹配结果并 不包括这个模式的字符串。

6.(?<!pattern):表示匹配位置前面不能跟着pattern模式的字符,匹配结果并不 包括这个模式的字符串

7.(?:pattern):表示将 pattern 包含在一个分组中,但不把这个分组的匹配结果 保存到分组编号中。

三、Python中的re库 

3.1、re.match

该函数尝试从字符串的起始位置匹配,如果起始位置没有匹配成功的话,就返回 None,否则会返回一个匹配对象

re.match(pattern,string,flags=0) 

        pattern:正则表达式的格式。

        string:被匹配的文本。

        flags:标志位,用于控制正则表达式的匹配方式

应用场景

        验证输入格式:检查用户输入是否符合特定的格式,例如电子邮件、电话号码、 日期等 

        提取信息:从字符串的开始位置提取符合正则表达式模式的字串,如提取文件名 等。

        数据解析:在处理日志文件或配置文件时,可以用来解析每行的开始部分,获取 关键信息。 

import rem = re.match('foo', 'food') # 返回匹配对象
print(m) # <re.Match object; span=(0, 3), match='foo'>m = re.match('foo', 'fbar') # 不匹配,返回None
print(m) # None

3.2、re.search

从文本中获取第一个符合正则表达式模式的字符的位置,并返回一个匹配对 象,如果没有匹配到,就返回None。

re.search(pattern,string,flags=0) 

        pattern:正则表达式的格式。

        string:被匹配的文本。

        flags:标志位,用于控制正则表达式的匹配方式

应用场景

        检查字符串是否包含子串:检查一个字符串是否包含某个特定的文本。

        提取数据:从字符串中的任意位置提取信息,例如从一个文本段落中提取所有提 到的日期。

        搜索文件:在某文件中查找特定的消息或事件。 

import rem = re.search('foo', 'hellofood')  
print(m) # <re.Match object; span=(6, 9), match='foo'>m = re.search('foo', 'hello')  
print(m) # None

3.3、re.findall

数从文本中寻找所有与模式匹配的子串,并将所有的匹配结果存储到一个列表中 进行返回,如果没有匹配成功会返回一个空列表。

re.findall(pattern,string,flags=0) 

        pattern:正则表达式的格式。

        string:被匹配的文本。

        flags:标志位,用于控制正则表达式的匹配方式

应用场景

        提取多个子串:当你需要在字符串中找到所有匹配特定模式的字串时。

        文本分析:在文本中,提取文本中特定的词汇、短语或模式。

import relst = re.findall('ab', 'abcdabcdabcd') 
print(lst) # ['ab', 'ab', 'ab']

3.4、re.sub

将文本中与模式匹配的部分替换为其他的内容

re.sub(pattern,repl,string,count,flags=0) 

        pattern:正则表达式的格式。

        repl:这是替换文本或一个函数。如果是文本,就是将匹配到的内容替换为该文本; 如果是函数,会在函数中进行文本处理的操作。

        string:被匹配的文本。

        count: 这是可选参数,表示替换的最大次数。默认值为 0,表示替换所有 匹配项。

        flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写、 设置多行匹配模式等,具体有哪些标志可参考下面的附录1表格。

应用场景

        文本格式化:将文本中的特定模式的文本替换为另一种格式。

        数据清洗:在处理数据时,移除或替换无效或不需要的字符,比如在一系列文本 中删除非数字字符以清理电话号码。

        敏感信息脱敏:在显示或存储数据前,将敏感信息(比如身份证号、手机号)的 部分内容替换为星号。 

import retext = 'yeah, but no, but yeah, but no'
print(re.sub('but', 'AND', text))
# yeah, AND no, AND yeah, AND no

3.5、re.split

将某文本根据匹配模式进行分割,并将分割后的结果放入列表中返 回

re.split(pattern,string,maxsplit,flags=0) 

        pattern:正则表达式的格式。

        string:被匹配的文本。

        maxsplit:表示最大分割次数。默认值为 0,表示分割所 有匹配项。

        flags:标志位,用于控制正则表达式的匹配方式

import re
text = "apple, banana, orange, watermelon"
fruits = re.split(r',\s*', text)
print(fruits) #['apple', 'banana', 'orange', 'watermelon']

3.6、re.compile

预先编译正则表达式要匹配的模式,并会返回一个正则表达式的对象,该对 象与re.match返回的对象不同,该对象可以调用上面的函数。

re.compile(pattern, flags=0) 

        pattern:要匹配的正则表达式。

        flags:标志位,用于控制正则表达式的匹配方式

常见的应用场景:

        多次匹配:当你需要在一个较长的文本中多次应用同一个正则表达式时,使用 re.compile可以避免每次匹配时都重新编译表达式。

import re# 编译一个正则表达式模式,用于匹配手机号
email_pattern = re.compile(r'[1]{1}[3589]{1}[0-9]{9}')
text = '''1o23j0 rde013309876543cvbnoikdjgv10248895490-/*-+68-*8+'''
emails = email_pattern.search(text)print(emails)
# <re.Match object; span=(15, 26), match='13309876543'>

 四、思维导图

相关文章:

Python----Python高级(正则表达式:语法规则,re库)

一、正则表达式 1.1、概念 正则表达式&#xff0c;又称规则表达式,&#xff08;Regular Expression&#xff0c;在代码中常简写为regex、 regexp或RE&#xff09;&#xff0c;是一种文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a 到 z 之间的字母&#xff0…...

通过Ukey或者OTP动态口令实现windows安全登录

通过 安当SLA&#xff08;System Login Agent&#xff09;实现Windows安全登录认证&#xff0c;是一种基于双因素认证&#xff08;2FA&#xff09;的解决方案&#xff0c;旨在提升 Windows 系统的登录安全性。以下是详细的实现方法和步骤&#xff1a; 1. 安当SLA的核心功能 安…...

Node.js接收文件分片数据并进行合并处理

前言&#xff1a;上一篇文章讲了如何进行文件的分片&#xff1a;Vue3使用多线程处理文件分片任务&#xff0c;那么本篇文章主要看一下后端怎么接收前端上传来的分片并进行合并处理。 目录&#xff1a; 一、文件结构二、主要依赖1. express2. multer3. fs (文件系统模块)4. pat…...

Lsky-Pro在线图片搭建教程(Docker部署方式)

Lsky Pro+ 是一个使用 PHP 语言,采用 Laravel 框架开发的一款 Web 图片管理程序,中文名:兰空图床。如果你需要一个在线图床程序,那么这个开源项目可以帮助到你,部署流程非常简单。本章教程记录如何部署Lsky-Pro。 一、拉取镜像 docker pull halcyonazure/lsky-pro-docke…...

“深入浅出”系列之算法篇:(2)openCV、openMV、openGL

OpenCV是一个的跨平台计算机视觉库,可以运行在Linux囚、Windows 和Mac OS操作系统上。它轻量级而且高效,由一系列 C函数和少量C类构成&#xff0c;同时也提供了Python 接口&#xff0c;实现了图像处理和计算机视觉方面的很多通用算法。 OpenMV是一个开源&#xff0c;低成本&am…...

AI 新动态:技术突破与应用拓展

目录 一.大语言模型的持续进化 二.AI 在医疗领域的深度应用 疾病诊断 药物研发 三.AI 与自动驾驶的新进展 四.AI 助力环境保护 应对气候变化 能源管理 后记 在当下科技迅猛发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;无疑是最具影响力的领域之一。AI 技…...

从CRUD到高级功能:EF Core在.NET Core中全面应用(三)

目录 IQueryable使用 原生SQL使用 实体状态跟踪 全局查询筛选器 并发控制使用 IQueryable使用 在EFCore中IQueryable是一个接口用于表示可查询的集合&#xff0c;它继承自IEnumerable但具有一些关键的区别&#xff0c;使得它在处理数据库查询时非常有用&#xff0c;普通集…...

【记录】Jenkins版本及JDK关系介绍的官网地址

Redhat Jenkins Packages...

vue3-json-viewer和vue-json-pretty插件使用,vue3 json数据美化展示

本文介绍vue3如何进行json数据pretty展示 1 vue3-json-viewer 1.1 安装 npm install vue3-json-viewer --save1.2 全局引入 在main.ts中引入&#xff0c;然后直接在组件中使用 import { createApp } from vue import App from ./App.vue import JsonViewer from "vue3…...

python转转商超书籍信息爬虫

1基本理论 1.1概念体系 网络爬虫又称网络蜘蛛、网络蚂蚁、网络机器人等&#xff0c;可以按照我们设置的规则自动化爬取网络上的信息&#xff0c;这些规则被称为爬虫算法。是一种自动化程序&#xff0c;用于从互联网上抓取数据。爬虫通过模拟浏览器的行为&#xff0c;访问网页并…...

Spring Boot 中的 InitializingBean:Bean 初始化背后的故事

在 Spring Boot 应用中&#xff0c;Bean 的生命周期管理至关重要。InitializingBean 接口允许 Bean 在完成属性注入后执行自定义初始化逻辑。本文将深入探讨 InitializingBean 接口在 Spring Boot 中的应用&#xff0c;揭示其工作原理&#xff0c;并分享一些最佳实践&#xff0…...

微信小程序:实现单选,多选,通过变量控制单选/多选

一、实现单选功能 微信小程序提供了 radio 组件来实现单选功能。radio 组件需要配合 radio-group 使用。 1. WXML 代码 <radio-group bindchange"onRadioChange"><label wx:for"{{items}}" wx:key"id"><radio value"{{it…...

MOS怎样选型,步骤详解

一&#xff1a;选用N沟道还是P沟道   为设计选择正确器件的第一步是决定采用N沟道还是P沟道MOSFET。在典型的功率应用中&#xff0c;当一个MOSFET接地&#xff0c;而负载连接到干线电压上时&#xff0c;该MOSFET就构成了低压侧开关。在低压侧开关中&#xff0c;应采用N沟道M…...

CMake技术细节:解决未定义,提供参数

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…...

1688 满足跨境业务需求而提供的一组 API 接口

1688 跨境属性接口系列是 1688 开放平台为满足跨境业务需求而提供的一组 API 接口&#xff0c;其中最主要的是1688.item_get : 一&#xff1a;1688.item_get接口 接口功能&#xff1a;主要用于查询 1688 商品的跨境属性&#xff0c;为开发者和商家提供了获取商品跨境关键信息…...

物联网网关Web服务器--CGI开发实例BMI计算

本例子通一个计算体重指数的程序来演示Web服务器CGI开发。 硬件环境&#xff1a;飞腾派开发板&#xff08;国产E2000处理器&#xff09; 软件环境&#xff1a;飞腾派OS&#xff08;Phytium Pi OS&#xff09; 硬件平台参考另一篇博客&#xff1a;国产化ARM平台-飞腾派开发板…...

计算机网络 (51)鉴别

前言 计算机网络鉴别是信息安全领域中的一项关键技术&#xff0c;主要用于验证用户或信息的真实性&#xff0c;以及确保信息的完整性和来源的可靠性。 一、目的与重要性 鉴别的目的是验明用户或信息的正身&#xff0c;对实体声称的身份进行唯一识别&#xff0c;以便验证其访问请…...

【Docker】搭建一个功能强大的自托管虚拟浏览器 - n.eko

前言 本教程基于群晖的NAS设备DS423的docker功能进行搭建&#xff0c;DSM版本为 DSM 7.2.2-72806 Update 2。 n.eko 支持多种类型浏览器在其虚拟环境中运行&#xff0c;本次教程使用 Chromium​ 浏览器镜像进行演示&#xff0c;支持访问内网设备和公网地址。 简介 n.eko 是…...

论文笔记(六十二)Diffusion Reward Learning Rewards via Conditional Video Diffusion

Diffusion Reward Learning Rewards via Conditional Video Diffusion 文章概括摘要1 引言2 相关工作3 前言4 方法4.1 基于扩散模型的专家视频建模4.2 条件熵作为奖励4.3 训练细节 5 实验5.1 实验设置5.2 主要结果5.3 零样本奖励泛化5.4 真实机器人评估5.5 消融研究 6 结论 文章…...

探索 Stable-Diffusion-Webui-Forge:更快的AI图像生成体验

目录 简介&#x1f31f; 主要特点&#x1f4e5; 安装步骤1. 下载2. 配置环境和安装依赖3. 模型目录说明 &#x1f680; 运行 Stable-Diffusion-Webui-Forge1. 进入项目目录2. 运行项目3. 打开页面 &#x1f3a8; 使用体验常见问题&#x1f4dd; 小结 简介 Stable-Diffusion-We…...

Redis使用基础

1 redis介绍 Redis&#xff08;Remote Dictionary Server )&#xff0c;即远程字典服务 ! 是完全开源的&#xff0c;遵守 BSD 协议&#xff0c;是一个高性能的 key-value 数据库。 使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并…...

PyCharm+RobotFramework框架实现UDS自动化测试- (四)项目实战0x10

1.环境搭建 硬件环境&#xff1a;CANoe、待测设备&#xff08;包含UDS诊断模块&#xff09; 2.pythonPyCharm环境 pip install robotframework pip install robotframework-ride pip install openpyxl pip install udsoncan pip install python-can pip install can-isotp3…...

【TCP】rfc文档

tcp协议相关rfc有哪些 TCP&#xff08;传输控制协议&#xff09;是一个复杂的协议&#xff0c;其设计和实现涉及多个RFC文档。以下是一些与TCP协议密切相关的RFC文档列表&#xff0c;按照时间顺序排列&#xff0c;涵盖了从基础定义到高级特性和优化的各个方面&#xff1a; 基…...

【SpringCloud】黑马微服务学习笔记

目录 1. 关于微服务 ?1.1 微服务与单体架构的区别 ?1.2 SpringCloud 技术 2. 学习前准备 ?2.1 环境搭建 ?2.2 熟悉项目 3. 正式拆分 ?3.1 拆分商品功能模块 ?3.2 拆分购物车功能模块 4. 服务调用 ?4.1 介绍 ?4.2 RustTemplate?的使用 4.3 服务治理-注册中…...

梯度提升决策树树(GBDT)公式推导

### 逻辑回归的损失函数 逻辑回归模型用于分类问题&#xff0c;其输出是一个概率值。对于二分类问题&#xff0c;逻辑回归模型的输出可以表示为&#xff1a; \[ P(y 1 | x) \frac{1}{1 e^{-F(x)}} \] 其中 \( F(x) \) 是一个线性组合函数&#xff0c;通常表示为&#xff…...

【MySQL】表的基本操作

??表的基本操作 文章目录&#xff1a; 表的基本操作 创建查看表 创建表 查看表结构 表的修改 表的重命名 表的添加与修改 删除表结构 总结 前言&#xff1a; 在数据库中&#xff0c;数据表是存储和组织数据的基本单位&#xff0c;对于数据表的操作是每个程序员需要烂熟…...

项目中使用的是 FastJSON(com.alibaba:fastjson)JSON库

从你的 pom.xml 文件中可以看到&#xff0c;项目明确依赖了以下 JSON 库&#xff1a; FastJSON&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version> </depende…...

Flutter中PlatformView在鸿蒙中的使用

Flutter中PlatformView在鸿蒙中的使用 概述在Flutter中的处理鸿蒙端创建内嵌的鸿蒙视图创建PlatformView创建PlatformViewFactory创建plugin&#xff0c;注册platformview注册插件 概述 集成平台视图&#xff08;后称为平台视图&#xff09;允许将原生视图嵌入到 Flutter 应用…...

音频入门(一):音频基础知识与分类的基本流程

音频信号和图像信号在做分类时的基本流程类似&#xff0c;区别就在于预处理部分存在不同&#xff1b;本文简单介绍了下音频处理的方法&#xff0c;以及利用深度学习模型分类的基本流程。 目录 一、音频信号简介 1. 什么是音频信号 2. 音频信号长什么样 二、音频的深度学习分…...

规避路由冲突

路由冲突是指在网络中存在两个或多个路由器在进行路由选择时出现矛盾&#xff0c;导致网络数据包无法正确传输&#xff0c;影响网络的正常运行。为了规避路由冲突&#xff0c;可以采取以下措施&#xff1a; 一、合理规划IP地址 分配唯一IP&#xff1a;确保每个设备在网络中都有…...