[問題] 正則的分組匹配問題

看板Python作者 (TGG)時間11月前 (2023/05/26 12:00), 編輯推噓1(217)
留言10則, 6人參與, 11月前最新討論串1/1
嗨版上大家好,最近重溫正則表達式, 直接切入主題 想說搞清楚分組的匹配邏輯,就測試以下 re.findall(r"(\d)+", "my number are 8755 and 33" 就我的理解是因為只有5跟3是疊字,所以應該會回傳['5','3'] 也確實如此 但不確定是不是只是結果矇對了QQ 於是我稍加修改, re.findall(r"(\d)+", "my number are 87558 and 337" 但回傳的結果是['8','7'],沒有5也沒有3 拿去問chatgpt, 回答是在87558的情況下,會依序8>7>5>5>8這樣匹配, 後面無法再繼續匹配就發生回溯,於是回傳8 8755的情況是直接匹配到最後一個字符'5',當作最後一個成功結果,故回傳 結果把我搞得更亂了QQ,請問版上高手為何這兩種狀況會有這麼不同的回傳結果Orz? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.124.123.10 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1685073625.A.DD9.html

05/26 12:11, 11月前 , 1F
(\d)+就不是找疊字啊 任何相連數字都會匹配
05/26 12:11, 1F

05/26 12:12, 11月前 , 2F
單一數字也會匹配
05/26 12:12, 2F

05/26 12:17, 11月前 , 3F
疊字的 pattern 是 (\d)\1,透過 \1 去 backreferwnce
05/26 12:17, 3F

05/26 21:23, 11月前 , 4F
group會捕捉 + 的最後一個匹配
05/26 21:23, 4F

05/27 03:30, 11月前 , 5F
A repeated capturing group will only capture the last i
05/27 03:30, 5F

05/27 03:30, 11月前 , 6F
teration.
05/27 03:30, 6F

05/27 22:53, 11月前 , 7F
??
05/27 22:53, 7F

05/28 16:30, 11月前 , 8F
根本錯
05/28 16:30, 8F

05/28 16:30, 11月前 , 9F
三樓就是正解
05/28 16:30, 9F

05/28 16:31, 11月前 , 10F
你寫的是任意數字串的最後一個數字
05/28 16:31, 10F
文章代碼(AID): #1aS2xPtP (Python)
文章代碼(AID): #1aS2xPtP (Python)