===============================================
如果用re.findall('o*?',source)会得到'','','','','','',''这个结果
我不太懂为什么中间四个o有被匹配到却不会显示出来
===============================================
这个其实更有趣了,单看 o*? , 代表的是 零个以上的 o 尽量少取
根据 re.findall 的特性,他会由左而右不重叠的取出来
如果以 o*? 来去对 fooood 做 findall ,我们由左而右来看,
黄色的就是目前正在检查的:
fooood , f 符合 "零个以上的 o" 吗?
=> Yes, "零个 o" , 所以得到第一个 ''
fooood , o 符合 "零个以上的 o" 吗?
=> Yes, 符合零个 o , 因为是 "尽量少取"
所以得到第二个 ''
fooood , o 符合 "零个以上的 o" 吗?
=> Yes, 符合零个 o , 因为是 "尽量少取"
所以得到第三个 ''
依此类推,所以你会得到很多的个 ''
补充,如果把 pattern 改成 o+? , 就会得到 'o','o','o','o'
因为 o+ 的 "最少" 是一个 ;
而 f 和 d 都不符合 "一个以上的 o" 所以不会被列入
若改成 o+ , 就会得到 'oooo' , 因为他很贪心把所有的 o 都吃掉了