当前位置: 首页 > 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

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


http://www.mrgr.cn/news/37916.html

相关文章:

  • 基于Hive和Hadoop的共享单车分析系统
  • 各领域/行业硬件一览表
  • pyside6与协程
  • 对抗攻击方法详解:梯度攻击、转移攻击与模型集成攻击
  • 你的下一台手机会是眼镜吗?RTE 大会与你一同寻找下一代计算平台丨「空间计算和新硬件」论坛报名
  • c++学习笔记(47)
  • 国内AI大模型,这篇文章说透了
  • 探探Java与python中的闭包
  • 【编程小白必看】MySQL 日期类型转换与判断操作秘籍一文全掌握
  • 基于STM32的智能灌溉系统
  • 数论——数数(找质因数个数),三位出题人(组合数学,快速幂)
  • 掌握AI提示词的艺术:应用、防护与成为提示词专家的策略
  • Qt5 常见宏定义 记录
  • Generic-eUICC-Test-Profile-for-Device-Testing-Public
  • 深入浅出CSS盒子模型
  • 什么是数据倾斜
  • 3D Gaussian Splatting 学习笔记
  • 学生党有福了!分享5个免费的AI论文生成工具
  • 六款外贸财务软件对比,年度最佳选择
  • 跟我学C++中级篇——if条件语句与switch比较