python小小白哟 发表于 2023-6-20 18:04:59

python中贪婪和非贪婪模式

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个,为什么结果却截然相反呢?

isdkz 发表于 2023-6-20 18:15:56

在这个例子中,贪婪模式的正则表达式 '^Hello.*(\d+).*Demo$' 会尽可能地匹配尽量多的字符。 .* 表示匹配任意个字符,因此它会一直匹配直到最后一个数字字符7。而 (\d+) 表示匹配一个或多个数字字符,因此它只会匹配最后的数字7。

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

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

因此,贪婪模式和非贪婪模式的区别在于它们在匹配字符时的策略不同。贪婪模式会尽可能地匹配更多的字符,而非贪婪模式会尽可能少地匹配字符。

琅琊王朝 发表于 2023-6-27 19:08:25

解答如下:
页: [1]
查看完整版本: python中贪婪和非贪婪模式