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

如何理解re.split(r'(\w)+', 'test abcd')仅返回最后一个匹配字母?

正则re.split分组重复匹配的结果疑问

先看实际执行的代码和输出结果:

import re
print(re.split(r'(\w)+', 'test abcd'))
# 输出:['', 't', ' ', 'd', '']

为什么返回列表里只显示每个匹配段的最后一个字母?

核心原因是:当正则表达式里的**分组带有重复量词(比如+)**时,分组只会记录最后一次匹配的内容。

具体到这个例子:

  • 正则(\w)+的逻辑是:匹配1次或多次单个字母(\w),每次匹配的单个字母都会存入分组,但后续的匹配会直接覆盖之前的分组内容。
  • 对于字符串里的test,整个词会被(\w)+匹配,但分组最终只保留最后一次匹配的t;
  • 对于abcd,同理分组最后只保留d;
  • re.split会把分隔符(这里就是被(\w)+匹配的内容)对应的分组结果插入到拆分后的列表中,所以就出现了列表里的t和d。

如果想保留整个匹配的单词,应该把量词放到分组内部,比如用(\w+),这样分组会匹配整个单词并完整保留:

print(re.split(r'(\w+)', 'test abcd'))
# 输出:['', 'test', ' ', 'abcd', '']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:15:40