作者god1230321 (TGG)
看板Python
标题[问题] 正则的分组匹配问题
时间Fri May 26 12:00:23 2023
嗨版上大家好,最近重温正则表达式,
直接切入主题
想说搞清楚分组的匹配逻辑,就测试以下
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://webptt.com/cn.aspx?n=bbs/Python/M.1685073625.A.DD9.html
1F:→ lycantrope: (\d)+就不是找叠字啊 任何相连数字都会匹配 05/26 12:11
2F:→ lycantrope: 单一数字也会匹配 05/26 12:12
3F:→ Hsins: 叠字的 pattern 是 (\d)\1,透过 \1 去 backreferwnce 05/26 12:17
4F:推 poototo: group会捕捉 + 的最後一个匹配 05/26 21:23
5F:→ zerof: A repeated capturing group will only capture the last i 05/27 03:30
6F:→ zerof: teration. 05/27 03:30
7F:推 CaptainH: ?? 05/27 22:53
8F:嘘 s860134: 根本错 05/28 16:30
9F:→ s860134: 三楼就是正解 05/28 16:30
10F:→ s860134: 你写的是任意数字串的最後一个数字 05/28 16:31