You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

while循环赋值表达式中m.end()是否指向前一次匹配的末尾?

正则表达式循环中m.end()的作用解答

先看你提供的Python代码:

m = re.match(pattern, text)
while m := p.search(text, m.end()):
    # do with match

答案是肯定的:这里的m.end()确实指代前一次匹配得到的m对象,作用就是让p.search()从上次匹配结果的末尾位置开始搜索,避免重复匹配同一内容。

原理很明确:Python的赋值表达式:=遵循「先计算右侧表达式,再赋值给左侧变量」的执行顺序。在while循环条件中,第一次执行时,m是之前re.match()得到的匹配对象,调用m.end()会返回上次匹配结束的索引位置,p.search()就从这个位置开始查找下一个匹配;找到后,新的匹配对象会赋值给m,下一次循环时,m.end()就会基于这个新的匹配对象的结束位置计算,以此类推,直到p.search()找不到匹配、返回None时,循环终止。

虽然PEP-572没专门提及while循环的场景,但赋值表达式的执行逻辑是确定的,因此这里的m.end()必然是用赋值前的m(也就是前一次的匹配对象)来计算的。

内容的提问来源于stack exchange,提问作者Abhijit Sarkar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 14:42:36