Re: [問題] 正規表示法"*?"

看板Python作者 (Mr. Pan)時間9年前發表 (2016/05/28 14:40), 9年前編輯推噓10(1002)
留言12則, 11人參與, 最新討論串3/5 (看更多)
=============================================== 如果用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
長知識 RE真的一堆規則沒用過還真看不懂
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
不懂為什麼o符合零個o..也不懂怎有七個''....
07/04 10:47, 12F
文章代碼(AID): #1NIQtQwx (Python)
討論串 (同標題文章)
文章代碼(AID): #1NIQtQwx (Python)