Re: [問題] 正規表示法"*?"
===============================================
如果用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
推
05/28 22:42, , 1F
05/28 22:42, 1F
※ 編輯: darkk6 (223.139.154.78), 05/28/2016 22:49:03
推
05/28 22:50, , 2F
05/28 22:50, 2F
推
05/29 23:45, , 3F
05/29 23:45, 3F
推
05/30 18:39, , 4F
05/30 18:39, 4F
推
05/30 19:39, , 5F
05/30 19:39, 5F
推
05/31 11:02, , 6F
05/31 11:02, 6F
推
05/31 21:55, , 7F
05/31 21:55, 7F
推
06/01 10:48, , 8F
06/01 10:48, 8F
推
06/01 14:51, , 9F
06/01 14:51, 9F
推
06/05 10:28, , 10F
06/05 10:28, 10F
→
06/07 09:42, , 11F
06/07 09:42, 11F
→
07/04 10:47, , 12F
07/04 10:47, 12F
討論串 (同標題文章)