鱼C论坛

 找回密码
 立即注册
查看: 2205|回复: 2

python中贪婪和非贪婪模式

[复制链接]
发表于 2023-6-20 18:04:59 | 显示全部楼层 |阅读模式

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

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

x
import re

content = 'Hello 1234567 World_This is a Regex Demo'
result = re.match('^He.*(\d+).*Demo$',content)
print(result)
print(result.group(1))

这里贪婪模式代码:
result = re.match('^Hello.*(\d+).*Demo$',content)
匹配的不是应该是1234567吗?结果为什么会是单独一个数字7呢?贪婪指的不是匹配很多个数字吗?

还有非贪婪模式:
result = re.match('^He.*?(\d+).*Demo$',content)
非贪婪的字面意思就是不匹配那么多的数字,仅仅匹配1个,为什么结果却截然相反呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-20 18:15:56 | 显示全部楼层
在这个例子中,贪婪模式的正则表达式 '^Hello.*(\d+).*Demo$' 会尽可能地匹配尽量多的字符。 .* 表示匹配任意个字符,因此它会一直匹配直到最后一个数字字符7。而 (\d+) 表示匹配一个或多个数字字符,因此它只会匹配最后的数字7。

所以,结果中只能提取到7这一个数字。

而非贪婪模式的正则表达式 '^He.*?(\d+).*Demo$' 会尽可能少地匹配字符。 .*? 表示匹配前面的字符尽可能少的次数,所以它会先匹配到数字字符1,然后再匹配 \d+ 部分,最终提取到的数字是1234567。

因此,贪婪模式和非贪婪模式的区别在于它们在匹配字符时的策略不同。贪婪模式会尽可能地匹配更多的字符,而非贪婪模式会尽可能少地匹配字符。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-27 19:08:25 | 显示全部楼层
解答如下:

解答:

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 20:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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