看板 Python 關於我們 聯絡資訊
=============================================== 如果用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 都吃掉了 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.139.154.78 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1464446426.A.EBB.html
cryinrain: 原來如此!豁然開朗阿!!!!! 05/28 22:42
※ 編輯: darkk6 (223.139.154.78), 05/28/2016 22:49:03
cryinrain: 感謝大大指點迷津! 05/28 22:50
flashgodie: 長知識推 05/29 23:45
wevol: 長知識推 05/30 18:39
tuyutd0505: 長知識推!! 05/30 19:39
c74319: 利用顏色說明用心不得不推!! 05/31 11:02
gbllggi: 長知識推 05/31 21:55
kanggy: 謝謝大大用心說明 06/01 10:48
jason7086: 長知識 RE真的一堆規則沒用過還真看不懂 06/01 14:51
ms9831117: 用心推! 06/05 10:28
wadd: 用心。清楚的好文 06/07 09:42
yougigun: 不懂為什麼o符合零個o..也不懂怎有七個''.... 07/04 10:47