[问题] 正则的分组匹配问题

楼主: 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