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

Python正则表达式(二)

目录

六、re.findall()函数和分组

1、0/1分组情况

2、多分组情况

七、或“|”的用法

1、作用域

2、用法

八、贪婪模式和懒惰模式

1、量词的贪婪模式

2、量词的懒惰模式

九、匹配对象

1、相关函数


六、re.findall()函数和分组

1、0/1分组情况

在正则表达式中,如果没有分组的话,re.findall()函数就会返回一个所有符合匹配的子串的集合的列表,有且只有一个分组时,re.findall()函数会返回一个列表,列表中的每一个元素就是一个符合匹配的子串在分组中的内容

例子:

import rezzbds = "[a-z]+(\d+)[a-z]+"
str = "ac99o hs665cja jja666kc"x = re.findall(zzbds , str)
print(x)

在这个例子的正则表达式中,我们加了一个分组,把\d+给括起来了,这样输出结果的时候,就是把各个符合要求的子串中,分组的部分给输出出来

看看输出:

我们可以把上面例子的分组去掉,来看看这两个的区别:

代码:

import rezzbds = "[a-z]+\d+[a-z]+"    #删去了分组的括号
str = "ac99o hs665cja jja666kc"x = re.findall(zzbds , str)
print(x)

输出:

这样就是输出各个符合要求的子串

2、多分组情况

在正则表达式中,若正则表达式中有多个分组,则re.findall()函数会返回一个包含多个元组的列表,每一个元组里面就是各个符合要求的子串中的分组的集合,顺序是一号分组,二号分组……

例子:

import rezzbds = "a(\d+)b c(\d+)d"
str = "a99b c88d a2932b c8239d a3b c22d"x = re.findall(zzbds , str)
print(x)

输出:

七、或“|”的用法

1、作用域

“ | ”表示或,如果没有放在分组的括号中,则作用范围就是整个正则表达式,或者到另外一个“ | ”处

2、用法

“ | ”是从左往右的短路匹配,即匹配上一个之后就不在计算能不能匹配上后面的了,比如正则表达式:(a | b),如果我们能用正则表达式a匹配上字符串,就不考虑b能后也能匹配上了

我们来看一个例子:

import rea = "aa|aab"
b = "aabaaccddeeaab"
c = re.findall(a , b)
print(c)

结果:

在上面的例子中,其实aab也可以有匹配的,但是它前面有aa这个正则表达式,所以当我们能匹配到aa的时候,aab就不会再被考虑了,除非aa无法匹配成功,才会考虑aab

八、贪婪模式和懒惰模式

1、量词的贪婪模式

贪婪模式就是在匹配字符串的时候会尽量匹配较长的子串

量词中+ * ? {m,n}等都是贪婪模式的

例子:

import rea = "<p>.+</p>"
b  = "<p>hello world !</p><p>你好!</p>"
c = re.findall(a , b)
print(c)

在这个例子中,我们想分别的输出两个HTML中的两个p元素,但是量词+是贪婪的,它会尽可能的匹配长的字符串,所以为了更长,他就把开头和结尾的那两个当作了匹配条件

所以输出是:

2、量词的懒惰模式

和贪婪模式相反,懒惰模式则是要匹配尽可能短的子串

我们在量词中+ * ? {m,n}这些量词的后面加上“?”,就是懒惰模式:

我们把上面的例子中添加一个问号:

import rea = "<p>.+?</p>"    #添加了一个?
b  = "<p>hello world !</p><p>你好!</p>"
c = re.findall(a , b)
print(c)

输出:

我们发现,变成了我们想要输出的两个元素了

九、匹配对象

匹配对象是我们在使用正则表达式时,匹配成功之后返回的结果集,但有时可能不一定是匹配成功的字符串,而是迭代器,所以,我们需要一些函数来输出我们想要的内容:

1、相关函数

①group([n1] , [n2]……)

用于获得一个或多个分组匹配的字符串,指定多个参数的时候以元组的形式返回,上述中的n1,n2等是指的分组的组号

编号0即代表整个匹配的子串,即group()等价于group(0)

没有匹配的字符串的时候我们返回None

匹配了多次的组返回最后一次匹配的子串

注:group函数支持search,match,finditer

②groups([default])

以元组的形式返回全部分组匹配的字符串,相当于调用了group(1,2,3,4……last),如果没有匹配成功的字符串,就用default这个值代替,默认的话是None

③groupdict([default])

返回以有名字的组的名字为键,以该组匹配到的子串为值的一个字典,没有名字的分组不包含在内(我们用(?P<name>pattern)来给分组的组起名字)

例子:

import rea = r"(?P<vvv>a(.+?)b)"
b  = "miascybku"
c = re.finditer(a , b)
for i in c :print(i.group("vvv"))

输出:

④start([group])

返回指定的组匹配的子串在string中的起始位置,group的默认值为0

⑤end([group])

返回指定的组匹配的子串在string中的结束位置(子串最后一个字符的位置+1),group的默认值为0

⑥span([group])

返回(start([group]) ,end([group]) ),group可以是组的编号,也可以是组的名字,缺省为0

⑦string

匹配时使用的子串

⑧lastindex

将最后一个匹配的分组的编号(不一定是最大的编号)输出,没有分组的话返回None

以上就是Python正则表达式(二)的全部内容:)

相关文章:

Python正则表达式(二)

目录 六、re.findall()函数和分组 1、0/1分组情况 2、多分组情况 七、或“|”的用法 1、作用域 2、用法 八、贪婪模式和懒惰模式 1、量词的贪婪模式 2、量词的懒惰模式 九、匹配对象 1、相关函数 六、re.findall()函数和分组 1、0/1分组情况 在正则表达式中&#x…...

学习《JS数据结构与算法》

博主这些日子去实习所以断更了&#xff0c;现在回归想接着学习一下数据结构与算法&#xff0c;学校也有上这门课&#xff0c;但博主去实习很多课都没上&#xff0c;现在自己看书学习一下&#xff0c;每天记录一下自己学习进度规范一下自己&#xff0c;需要这本书的可以私聊博主…...

图解AUTOSAR_SWS_FlashDriver

AUTOSAR Flash驱动(FLS)模块详解 AUTOSAR基础软件存储抽象层组件详细解析 目录 1. 概述 1.1. Flash驱动模块简介1.2. 功能和作用2. 架构设计 2.1. 模块架构2.2. API接口设计2.3. 状态机设计2.4. 异步操作时序2.5. 配置结构2.6. 任务处理流程3. 总结 3.1. 设计优势3.2. 应用场景…...

哪吒汽车:一边熬夜蹦迪,一边找药投医

两年前&#xff0c;威马CEO沈晖发了个短视频&#xff0c;内容是“活下去&#xff0c;像牲口一样活下去”。 如今最能体会沈晖当时心情的&#xff0c;估计就是方运舟了。 作为哪吒汽车创始人兼董事长&#xff0c;他连续多次被限高&#xff0c;为了让哪吒汽车活下去&#xff0c…...

Linux一步部署主DNS服务器

​ #!/bin/bash #部署DHCP服务 #userli 20250319if [ "$USER" ! "root" ]then echo"错误&#xff1a;非root用户&#xff0c;权限不足&#xff01;"exit 0fi#防火墙与高级权限 systemctl stop firewalld && systemctl disable firewalld…...

使用django的DRF业务逻辑应该放在序列化器类还是模型类

在 Django REST Framework (DRF) 中&#xff0c;序列化器和模型类有明确的职责划分。虽然序列化器在反序列化时负责接收、验证和转换数据&#xff0c;但模型类仍是整个系统的核心&#xff0c;承担更底层的职责。以下是详细解析&#xff1a; 一、序列化器 vs 模型类&#xff1a…...

图片隐私清理工具

图片隐私清理助手&#xff1a;一键清除图片敏感信息的神器 在数字时代&#xff0c;我们每天都会拍摄和分享大量图片&#xff0c;但你是否注意过这些图片中可能暗藏隐私信息&#xff1f;相机的GPS定位、拍摄参数等EXIF数据&#xff0c;都可能在不经意间泄露你的隐私。今天介绍的…...

【UE5】摄像机晃动

目录 效果 步骤 一、游戏中晃动视角 二、Sequence中晃动视角 效果 步骤 一、游戏中晃动视角 1. 新建一个蓝图&#xff0c;父类选择“CameraShakeBase” 这里命名为“BP_MyCameraShake” 打开“BP_MyCameraShake”&#xff0c;根晃动模式这里设置为“Perlin噪点摄像机晃…...

类和对象—继承(1)

目录 1、继承1.1、继承的概念1.2、继承的语法 2、子类访问父类成员2.1、子类中访问父类的成员变量2.2、子类中访问父类的成员方法2.3、super 关键字 3、子类构造方法 1、继承 在 Java 中&#xff0c;类对现实中的实体进行描述&#xff0c;而类实例化的对象用来表示现实中的实体…...

CCF CSP 第33次(2024.03)(2_相似度计算_C++)(字符串中字母大小写转换+哈希集合)

CCF CSP 第33次&#xff08;2024.03&#xff09;&#xff08;2_相似度计算_C&#xff09; 题目背景&#xff1a;题目描述&#xff1a;输入格式&#xff1a;输出格式&#xff1a;样例1输入&#xff1a;样例1输出&#xff1a;样例1解释&#xff1a;样例2输入&#xff1a;样例2输出…...

试试智能体工作流,自动化搞定运维故障排查

APO 1.5.0版本全新推出的智能体工作流功能&#xff0c;让运维经验不再零散&#xff01;只需将日常的运维操作和故障排查经验转化为标准化流程&#xff0c;就能一键复用&#xff0c;效率翻倍&#xff0c;从此告别重复劳动&#xff0c;把时间留给更有价值的创新工作。更贴心的是&…...

Linux应用:线程基础

线程介绍 进程是程序在操作系统里的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的一个执行单元&#xff0c;是 CPU 调度和分派的基本单位。一个进程可以包含多个线程&#xff0c;这些线程共享进程的资源&#xff0c;如内存空间、文…...

ngx_conf_parse

配置文件 #user nobody; worker_processes 1;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024; }http {#include mime.types;#default_type appli…...

要创建一个基于Spring Boot、Thymeleaf、MyBatis Plus和MySQL的简单表格增删改查(CRUD)项目

文章目录 要创建一个基于Spring Boot、Thymeleaf、MyBatis Plus和MySQL的简单表格增删改查&#xff08;CRUD&#xff09;项目1. 创建Spring Boot项目2.项目配置2.1 依赖yml配置数据库表配置 3.代码实现3.1 实体类3.2 数据访问层3.3 服务层3.4 控制层3.5 Thymeleaf模板 要创建一…...

解决Cubemx生产的 .ioc文件不能外部打开的方法

正常来说&#xff0c;cubemx生成的文件会有图标 但是当图标白色的时候&#xff0c;无法通过直接点击这个文件进入cubemx 1.首先检查java环境是不是装的JAVA8&#xff0c;如果是的话进行第二步操作&#xff1b; 2.重新安装一次cubemx&#xff0c;在安装的时候选择为我安装&…...

在 Linux(Ubuntu / CentOS 7)上快速搭建我的世界 MineCraft 服务器,并实现远程联机,详细教程

Linux 部署 MineCraft 服务器 详细教程&#xff08;丐版&#xff0c;无需云服务器&#xff09; 一、虚拟机 Ubuntu 部署二、下载 Minecraft 服务端三、安装 JRE 21四、安装 MCS manager 面板五、搭建服务器六、本地测试连接七、下载樱花&#xff0c;实现内网穿透&#xff0c;邀…...

Transformer | 一文了解:缩放、批量、多头、掩码、交叉注意力机制(Attention)

源自: AINLPer&#xff08;每日干货分享&#xff01;&#xff01;&#xff09; 编辑: ShuYini 校稿: ShuYini 时间: 2025-3-27 更多&#xff1a;>>>>专注大模型/AIGC、学术前沿的知识分享&#xff01; 引言 之前的文章&#xff1a;2万字长文&#xff01;一文了解…...

原型验证后客户推翻原有需求,如何止损

原型验证后客户推翻原有需求时止损的有效方法包括&#xff1a;迅速评估影响范围、立即开展沟通确认、调整项目计划和资源配置、更新变更管理流程、协商成本分担机制。其中&#xff0c;迅速评估影响范围是关键&#xff0c;项目团队必须立即明确此次变更的具体影响&#xff0c;包…...

六、小白学JAVA-类和对象

1、什么是类和对象 人类---类&#xff1a;走路、说话、学习 人---对象&#xff1a;具体到某个人&#xff0c;就是对象&#xff0c;走路、说话、学习&#xff0c;每个人都是独特的人。 public class Person {String name;public void walk() {System.out.println("我会走…...

CMLINK APN 手动设置

以下是针对 CMLINK 的 APN设置 的详细指南&#xff0c;基于常见配置需求&#xff1a; CMLINK APN 手动设置参数 参数项值说明名称CMLINK (自定义)任意命名&#xff08;如 CMLINK、CM Internet 等&#xff09;&#xff0c;建议使用ASCII字符&#xff0c;无特殊符号。APNcm.com …...

深入探索 Python 中的 asyncio:异步编程的利器

在当今的软件开发中&#xff0c;异步编程已经成为了提高程序性能和响应能力的重要手段之一。Python 作为一种广泛使用的编程语言&#xff0c;提供了强大的异步编程支持&#xff0c;而 asyncio 库则是其中的核心。本文将深入探讨 asyncio 的基本概念、使用方法以及一些高级特性&…...

STM32硬件IIC与OLED使用

OLED屏幕介绍 OLED即有机发光管(Organic Light-Emitting Diode,OLED)。OLED显示技术具有自发光、广视角、几乎无穷高的对比度、较低功耗、极高反应速度、可用于绕曲性面板、使用温度范围广、构造及制程简单等有点&#xff0c;被认为是下一代的平面显示屏新兴应用技术 OLED显示…...

基于Spring Boot的电动车智能充电服务平台的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

十、JavaScript对象

一、对象 创建对象的方法有三种&#xff1a;字面量、new、构造函数。 1.利用字面量创建对象 花括号{}里面包含了表达这个具体事物&#xff08;对象&#xff09;的属性和方法 // 1.利用对象字面量创建对象{}// var obj {}; // 创建了一个空的对象var obj {uname: black,ag…...

FFmpeg开发学习:音视频封装

1.基本流程 1.输入参数 输出文件路径 char *output 视频编码参数 AVCodecParameters *video_par 音频编码参数 AVCodecParameters *audio_par 数据包 AVPacket *packets[] 2.封装流程 &#xff08;1&#xff09;创建输出的上下文AVFormatContext指针 AVFormatContext *out_fm…...

hackmyvm-reversteg

arp-scan -l nmap -sS -v 192.168.222.45 在源码中可以看到 根据下面的提示可以猜测117db0148dc179a2c2245c5a30e63ab0是一个图像文件 将图片下载到本地 隐写术 在两张图片上使用strings,发现有一些可打印的字符串 strings 117db0148dc179a2c2245c5a30e63ab0.jpg base64解码…...

UE4学习笔记 FPS游戏制作17 让机器人持枪 销毁机器人时也销毁机器人的枪 让机器人射击

添加武器插槽 打开机器人的Idle动画&#xff0c;方便查看武器位置 在动画面板里打开骨骼树&#xff0c;找到右手的武器节点&#xff0c;右键添加一个插槽&#xff0c;重命名为RightWeapon&#xff0c;右键插槽&#xff0c;添加一个预览资产&#xff0c;选择Rifle&#xff0c;根…...

考研408-数据结构完整代码 线性表的链式存储结构 - 单链表

单链表操作详解&#xff08;C实现&#xff09; 目录 单链表尾插法创建单链表头插法创建删除指定节点按值查找按序号查找插入节点完整代码示例注意事项总结 尾插法创建 #include<bits/stdc.h> using namespace std;typedef struct LNode {int data;struct LNode* next;…...

蓝桥杯经典题解:班级活动分组问题的深度解析与优化实现

目录 一、问题背景与描述 二、问题分析与核心思路 2.1 问题本质&#xff1a;统计与配对优化 2.2 关键观察 2.3 数学建模 三、算法设计与实现步骤 3.1 算法步骤 3.2 代码实现&#xff08;Python&#xff09; 3.3 优化点分析 四、关键细节与常见误区 4.1 细节处理 4.…...

设计模式(创建型)-建造者模式

定义 建造者模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;它将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。该模式允许通过多个简单的步骤逐步构建出一个复杂的对象&#xff0c;用户只需指定复杂对象…...