fledgling 发表于 2022-5-12 16:45:03

正则表达式中的*和+

正则表达式中的*和+的区别不是只是+不能重复0次的区别吗?为什么在如下的代码中区别很大?
content='''
苹果,是红色的
橙子,是橙色的
香蕉,是黄色的
西瓜,是绿色的
'''
import re
p=re.compile(r'(.*),.+(.+色)')   #能匹配到不同的颜色
# p=re.compile(r'(.*),.+(.*色)')    #只能匹配一个色字
for a in p.findall(content):
    print(a)

Twilight6 发表于 2022-5-12 17:05:29


因为 * 和 + 匹配时都是贪婪匹配模式

所以你使用第二个中,r'(.*),.+(.*色)' 红字部分将 "," 号到 "色" 字之间的字符都匹配掉了

而 蓝色 * 号因为可以匹配 0 次,此时就匹配 0 次 导致之显式一个 色字了


'(.*)      ,      .+      (.+            色))'
苹果      ,      是      红            色)            的



'(.*)      ,      .+            (.*            色)'
苹果      ,       是红                      色            的




fledgling 发表于 2022-5-12 18:08:04

Twilight6 发表于 2022-5-12 17:05
因为 * 和 + 匹配时都是贪婪匹配模式

所以你使用第二个中,r'(.*),.+(.*色)' 红字部分将 "," 号到 "色 ...

谢谢啦,醍醐灌顶
页: [1]
查看完整版本: 正则表达式中的*和+