正则中捕获组和非捕获组区别

news2024/11/16 13:01:34

捕获组和非捕获组

    • 一. 捕获组(Capturing Groups)
    • 二. 非捕获组(Non-Capturing Groups)
    • 三. 区别
    • 四. 选择使用

这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。

作者:神的孩子都在歌唱

一. 捕获组(Capturing Groups)

  • 定义: 捕获组用于提取匹配的子字符串。它们会记住匹配的内容,允许你在后续的操作中引用这些内容。

  • 语法: 使用圆括号 () 来定义捕获组。

  • 用途: 适用于需要从匹配的文本中提取和使用某些部分的情况。例如,你可以从一个日期字符串中提取年、月、日。

  • 示例:

    (\d{4})-(\d{2})-(\d{2})
    
    • 这个正则表达式可以用来匹配日期格式 YYYY-MM-DD。它包含三个捕获组,分别用于提取年份、月份和日期。
    import re
    pattern = re.compile(r"(\d{4})-(\d{2})-(\d{2})")
    match = pattern.search("2024-09-23")
    if match:
        print(match.group(1))  # 2024
        print(match.group(2))  # 09
        print(match.group(3))  # 23
    

image-20240923160040953

二. 非捕获组(Non-Capturing Groups)

  • 定义: 非捕获组用于组织正则表达式中的模式,但不会记住匹配的内容。它们仅用于控制匹配的逻辑,而不会生成回溯。

  • 语法: 使用 (?:...) 来定义非捕获组。

  • 用途: 适用于需要分组以控制正则表达式的优先级,但不需要保存组内容的情况。例如,你可以使用非捕获组来指定选项或多重模式。

  • 示例:

    (?:\d{4})-(?:\d{2})-(?:\d{2})
    
    • 这个正则表达式与上面的示例类似,但使用非捕获组来匹配日期。非捕获组不会保存匹配的内容,仅用于组织模式。
    import re
    pattern = re.compile(r"(?:\d{4})-(?:\d{2})-(?:\d{2})")
    match = pattern.search("2024-09-23")
    if match:
        print("Match found!")
    

image-20240923160213822

三. 区别

  1. 捕获:

    • 捕获组会记住匹配的文本,允许你在后续操作中引用这些文本。
    • 非捕获组不会记住匹配的文本,只是用于匹配逻辑上的分组。
  2. 性能:

    • 捕获组会引入额外的开销,因为需要存储匹配的内容。
    • 非捕获组通常具有更高的性能,尤其是在复杂模式中。
  3. 引用:

    • 捕获组可以通过其组号引用,使用 group() 方法获取。
    • 非捕获组不能被引用,因为它们不存储匹配的内容。

四. 选择使用

  • 使用捕获组: 当你需要从匹配的文本中提取和操作特定的子串时。
  • 使用非捕获组: 当你只需要分组以控制模式的优先级,而不需要存储匹配内容时。

作者:神的孩子都在歌唱

本人博客:https://blog.csdn.net/weixin_46654114

转载说明:务必注明来源,附带本人博客连接。

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

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

相关文章

GESP等级考试C++二级-数学函数

C的cmath库中有丰富的数学函数,通过这些函数可以进行相应的数学计算。 1 cmath库的导入 通过import指令导入cmath库,代码如图1所示。 图1 导入cmath库的代码 2 abs()函数 abs()函数用来获取指定数的绝对值,代码如图2所示。 图2 abs()函数…

【递归】7. leetcode 404 左叶子之和

1 题目描述 题目链接:左叶子之和 2 解答思路 递归分为三步,接下来就按照这三步来思考问题 第一步:挖掘出相同的子问题 (关系到具体函数头的设计) 第二步:只关心具体子问题做了什么 (关系…

macOS安装Redis教程, 通过brew命令, 时间是2024年9月26日, redis版本是0.7.2

搜索: brew search redis安装Redis: brew install redis关于启动命令的提示: To start redis now and restart at login:brew services start redis Or, if you dont want/need a background service you can just run:/opt/homebrew/opt/redis/bin/redis-server /opt/home…

【图像处理】多幅不同焦距的同一个物体的平面图象,合成一幅具有立体效果的单幅图像原理(二)

实现多幅不同焦距图像合成一幅具有立体效果的图像可以使用以下算法和开源库: 实现算法 图像对齐 使用特征点匹配(如 SIFT、SURF 或 ORB)来对齐图像。利用 RANSAC 算法剔除离群点,估计变换矩阵。 深度图生成 基于图像的焦距和视角…

Teams集成-会议侧边栏应用开发-会议转写

Teams应用开发,主要是权限比较麻烦,大量阅读和实践,摸索了几周,才搞明白。现将经验总结如下: 一、目标:开发一个Teams会议的侧边栏应用,实现会议的实时转写。 二、前提: 1&#x…

探索5 大 Node.js 功能

目录 单线程 Node.js 工作线程【Worker Threads】 Node.js 进程 进程缺点 工作线程 注意 集群进程模块【Cluster Process Module】 内部发生了什么? 为什么要使用集群 注意: 应用场景: 内置 HTTP/2 支持 这个 HTTP/2 是什么&…

OpenHarmony(鸿蒙南向)——平台驱动指南【PWM】

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ 持续更新中…… 概述 功能简介 PWM即脉冲宽度调制(Pulse Width Modul…

【Linux】部署 flask

文章目录 一、安装Python3环境二、将本地开发环境的依赖项目生成清单文件三、创建虚拟环境启用虚拟环境退出虚拟环境 四、添加自定义系统服务(很重要) 一、安装Python3环境 1.首先安装编译环境(后续需要从python官网获取Python3的源码自己编译python yum install zlib-devel …

案例研究丨国控星鲨利用DataEase释放数据潜能,重塑业务视野

国药控股星鲨制药(厦门)有限公司(以下简称为国控星鲨)始创于1952年,前身为厦门鱼肝油厂,距今已经有70余年历史,是国家商务部认定的“中华老字号”企业。2011年,国药控股与厦门轻工集…

C# C++ 笔记

第一阶段知识总结 lunix系统操作 1、基础命令 (1)cd cd /[目录名] 打开指定文件目录 cd .. 返回上一级目录 cd - 返回并显示上一次目录 cd ~ 切换到当前用户的家目录 (2)pwd pwd 查看当前所在目录路径 pwd -L 打印当前物理…

从“可用”到“好用”,百度智能云如何做大模型的“超级工厂”?

如果说,过去两三年大模型处于造锤子阶段,那么今年,更多的则是考验钉钉子的能力,面对各类业务场景大模型是否能够有的放矢、一击必中,为千行百业深度赋能。 当前市场上,已经有200多把这样的锤子在疯狂找钉子…

从零开始使用树莓派debian系统使用opencv4.10.0进行人脸识别(保姆级教程)

一、总体架构 本文主要是使用树莓派自带的csi摄像头,搭配上opencv4.10.0进行物体的识别。本文使用的环境是python3.7.3,环境不一样有可能安装的opencv的过程也会很不一样,但是python的环境我们可以自己自行安装。 二、树莓派系统的安装 本文…

江协科技STM32学习- P19 TIM编码器接口

🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​…

亲身体验Llama 3.1:开源模型的部署与应用之旅

文章目录 1 Llama 3.1系列的诞生2 大型模型的未来发展3 使用教程4 Llama 3.1在客户服务中的运用 1 Llama 3.1系列的诞生 在人工智能的浪潮中,大型语言模型(LLM)正以其独特的魅力和潜力,成为深度学习领域的一颗耀眼明星。 这些模…

计算机毕业设计Hadoop+Spark知识图谱体育赛事推荐系统 体育赛事热度预测系统 体育赛事数据分析 体育赛事可视化 体育赛事大数据 大数据毕业设计

《HadoopSpark知识图谱体育赛事推荐系统》开题报告 一、研究背景及意义 随着互联网技术的迅猛发展和大数据时代的到来,体育赛事数据的数量呈爆炸式增长。用户面对海量的体育赛事信息,常常感到信息过载,难以快速找到感兴趣的赛事内容。如何高…

锐捷—NAT地址映射+IPsec隧道

任务目标 在出口路由器R3上将R5私网地址1对1映射的公网地址与R1建立IPsec隧道,使得R4在访问R5的映射公网地址时,可以进行IPsec隧道的转发 要求: 1、R4和R5可通过NAT转换正常访问互联网地址(R2的lo0) 2、R5的私网地…

云手机群控怎么用?有什么优势?

群控系统,顾名思义,是用于批量控制多部手机的工具,能够通过计算机或客户端同时管理多台设备。借助群控系统,用户可以在电脑上操作多部手机,模拟真实操作场景,从而大幅提升工作效率,并有效控制管…

calibre-web默认左上角字体修改

calibre-web默认左上角字体修改 如图: 有些奇异,如果想变成正常的常规字体,需要修改: cps\static\css\style.css 下的代码: 默认是GrandHotel-Regular: 换成其他字体即可。其他字体在 calibre-web\cps\s…

图像处理04

图像处理 问题:把不规则的图片按照参考图摆放 步骤: 1. 用ORB找关键点 2. 关键点匹配 3. 根据上一步匹配的关键点得出单应性矩阵 4. 根据单应性矩阵对不规则进行透视变换 import cv2 import numpy as np import matplotlib.pyplot as pltimgl cv2.imrea…

微信小程序 - 最新详细安装使用 Vant weapp UI 框架环境搭建详细教程

前言 自从 2024 年开始,小程序做了很多改变和升级, 导致网上很多搭建教程文章的教程失效了,本文来做最新的教程。 第一步 为了更贴合新手,我这里创建了一个纯净无任何业务代码的小程序项目。