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

作者: god1230321 (skyrim)   2023-05-26 12:00:23
嗨版上大家好,最近重溫正則表達式,
直接切入主題
想說搞清楚分組的匹配邏輯,就測試以下
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?
作者: lycantrope (阿寬)   2023-05-26 12:11:00
(\d)+就不是找疊字啊 任何相連數字都會匹配單一數字也會匹配
作者: Hsins (翔)   2023-05-26 12:17:00
疊字的 pattern 是 (\d)\1,透過 \1 去 backreferwnce
作者: poototo (poototo)   2023-05-26 21:23:00
group會捕捉 + 的最後一個匹配
作者: zerof (貓橘毛發呆雕像)   2023-05-27 03:30:00
A repeated capturing group will only capture the last iteration.
作者: CaptainH (Cannon)   2023-05-27 22:53:00
??
作者: s860134 (s860134)   2023-05-28 16:30:00
根本錯三樓就是正解你寫的是任意數字串的最後一個數字

Links booklink

Contact Us: admin [ a t ] ucptt.com