鱼C论坛

 找回密码
 立即注册
查看: 40|回复: 4

[已解决]贪婪模式与非贪婪模式

[复制链接]
发表于 昨天 00:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import re

>>>s = '<html><title>I want to top cloud<title><html>'
                       
>>>re.search(r'<.+>',s)
                       
>>><re.Match object; span=(0, 45), match='<html><title>I want to top cloud<title><html>'>

>>>re.search(r'<.+?>',s)
                       
>>><re.Match object; span=(0, 6), match='<html>'>

请问上述两个正则表达式的执行过程分别是什么样的? 谢谢
最佳答案
昨天 15:06
正则表达式二:r'<.+?>'

匹配方式:非贪婪模式

匹配结果:<html>

解释:

  • < 开始匹配。
  • .+? 尽可能少地匹配任意字符。
  • > 结束匹配。

过程:从第一个 < 开始,尽快找到下一个 >,只匹配 <html>。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 昨天 00:32 | 显示全部楼层
在正则表达式中,贪婪模式和非贪婪模式决定了匹配时的取舍策略:

1. **贪婪模式**(也就是默认模式):它会尝试匹配尽可能多的字符。   
   示例:`re.search(r'w.*t', s)`  
   - `w.*t`:从 `w` 开始,匹配任意数量的字符 `.*` 直到最后一个 `t`。

2. **非贪婪模式**:它会尝试匹配尽可能少的字符。通过在量词后面加 `?` 实现。  
   示例:`re.search(r'w.*?t', s)`  
   - `w.*?t`:从 `w` 开始,匹配尽可能少的字符 `.*?` 直到第一个 `t`。

根据你提供的代码,可能是遗漏了正则表达式。若补充正则表达式后,你的代码应分别表现出贪婪和非贪婪两种匹配方式。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 10:18 | 显示全部楼层
第一个正则表达式 r'<.+>':
.+ 表示匹配任意字符(.)一次或多次(+)。
这个正则表达式会匹配从字符串 s 中的第一个 < 开始,直到遇到的第一个 > 结束的任意字符序列。由于没有指定非贪婪匹配(?),所以它会尽可能多地匹配字符,直到遇到最后一个 >re.search(r'<.+>',s) 匹配了整个字符串 <html><title>I want to top cloud<title><html>,因为它从第一个 < 开始,一直匹配到字符串末尾的最后一个 >。
第二个正则表达式 r'<.+?>':
.+? 表示匹配任意字符(.)一次或多次(+),但是是非贪婪的(?),即尽可能少地匹配字符。
这个正则表达式会匹配从字符串 s 中的第一个 < 开始,直到遇到的第一个 > 结束的任意字符序列,但是它会在遇到第一个 > 时停止匹配,而不是继续寻找后面的 >。
re.search(r'<.+?>',s) 只匹配了 <html>,因为它在遇到第一个 > 后就停止了匹配,而不是继续匹配到字符串末尾。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 15:05 | 显示全部楼层
正则表达式一:r'<.+>'

匹配方式:贪婪模式

匹配结果:<html><title>I want to top cloud<title><html>

解释:

  • < 开始匹配。
  • .+ 尽可能多地匹配任意字符。
  • > 结束匹配。

过程:从第一个 < 开始,一直匹配到最后一个 >,覆盖整个字符串。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 15:06 | 显示全部楼层    本楼为最佳答案   
正则表达式二:r'<.+?>'

匹配方式:非贪婪模式

匹配结果:<html>

解释:

  • < 开始匹配。
  • .+? 尽可能少地匹配任意字符。
  • > 结束匹配。

过程:从第一个 < 开始,尽快找到下一个 >,只匹配 <html>。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-2 18:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表