如何理解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
相关产品推荐
相关产品推荐

