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

正则表达式中的贪婪模式和非贪婪模式

正则表达式中的贪婪模式和非贪婪模式

    • 一. 贪婪模式(Greedy Mode)
    • 二. 非贪婪模式(Non-Greedy Mode)
    • 三.应用场景区别

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

作者:神的孩子都在歌唱

一. 贪婪模式(Greedy Mode)

定义: 贪婪模式是正则表达式的默认匹配模式。在贪婪模式下,量词会尝试匹配尽可能多的字符。贪婪量词包括 *+?{n,m} 等。

示例:

假设我们有以下字符串:

<a>First</a><a>Second</a>

使用贪婪模式的正则表达式 <a>.*</a> 来匹配 <a></a> 之间的内容:

import retext = "<a>First</a><a>Second</a>"
pattern = re.compile(r"<a>.*</a>")
matches = pattern.findall(text)
print(matches)

输出:

['<a>First</a><a>Second</a>']

正则表达式 <a>.*</a> 匹配了整个字符串,因为 .* 尽可能多地匹配字符,直到最后一个 </a>

二. 非贪婪模式(Non-Greedy Mode)

定义: 非贪婪模式也称为懒惰模式(Lazy Mode)。在非贪婪模式下,量词会尝试匹配尽可能少的字符。非贪婪量词通过在贪婪量词后面加上一个问号 ? 来表示,例如 *?+???{n,m}? 等。

示例

使用非贪婪模式的正则表达式 <a>.*?</a> 来匹配 <a></a> 之间的内容:

import retext = "<a>First</a><a>Second</a>"
pattern = re.compile(r"<a>.*?</a>")
matches = pattern.findall(text)
print(matches)

输出:

['<a>First</a>', '<a>Second</a>']

正则表达式 <a>.*?</a> 分别匹配了两个 <a> 标签和它们之间的内容,因为 .*? 尽可能少地匹配字符,直到遇到第一个 </a>

三.应用场景区别

  • 贪婪模式:适用于需要匹配尽可能多内容的情况。
  • 非贪婪模式:适用于需要匹配尽可能少内容的情况,避免过度匹配。

作者:神的孩子都在歌唱

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

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

相关文章:

  • 小程序原生-利用setData()对不同类型的数据进行增删改
  • 《微信小程序实战(4) · 地图导航功能》
  • 【每天学个新注解】Day 10 Lombok注解简解(九)—@Accessors
  • 第十三届蓝桥杯真题Java c组C.纸张尺寸(持续更新)
  • UNI-APP_iOS开发技巧之:跳转到TestFlight或者App Store
  • SQL第11课——使用子查询
  • 983. 最低票价
  • PHP读取文件内容的几种方法和函数
  • django使用笔记6--docker部署
  • 破局汽车智能化浪潮:Tire 1供应商的网络优化与升级策略
  • 在Linux中进行OpenSSH升级(编译安装在openssh目录)
  • C语言系列4——指针与数组(1)
  • 【数据库】 MongoDB 用户分配新的角色和权限
  • 从零开始Ubuntu24.04上Docker构建自动化部署(三)Docker安装Nginx
  • Cannon-es.js之HingeConstraint铰链约束案例
  • 【剑指offer】让抽象问题具体化
  • Angular 响应式表单 基础例子
  • create-react-app项目添加less配置
  • echarts的各种常用效果展示
  • egg(89)--egg之redis的发布和订阅
  • IDEA常用插件整理
  • iOS 颜色设置看我就够了
  • JavaScript标准库系列——Math对象和Date对象(二)
  • js算法-归并排序(merge_sort)
  • node 版本过低
  • rc-form之最单纯情况
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 爱情 北京女病人
  • 浅谈Golang中select的用法
  • 如何在GitHub上创建个人博客
  • 一些css基础学习笔记
  • 一些关于Rust在2019年的思考
  • 责任链模式的两种实现
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 数据库巡检项
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​补​充​经​纬​恒​润​一​面​
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • # windows 安装 mysql 显示 no packages found 解决方法
  • #100天计划# 2013年9月29日
  • #FPGA(基础知识)
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (C#)获取字符编码的类
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (十八)三元表达式和列表解析
  • (一)Docker基本介绍
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包