作者:
darkk6 (Mr. Pan)
2016-05-28 22:40:24===============================================
如果用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 都吃掉了