Python按空格分割字符串并保留分隔符长度的更优实现方法
解决方案
你可以直接使用re.findall实现需求,代码非常简洁:
import re string = "This is a test." result = re.findall(r'\S+|\s+', string) print(result) # 输出:['This', ' ', 'is', ' ', 'a', ' ', 'test.']
逻辑说明
- 正则表达式
\S+|\s+会依次匹配两种模式:\S+:长度大于等于1的连续非空白字符\s+:长度大于等于1的连续空白字符
re.findall会按字符串的顺序返回所有匹配结果,刚好完全匹配你的预期输出,不需要额外处理空值或者拼接字符。
你之前使用re.split不符合预期是因为你分组的是单个空格( ),每个空格都会被单独识别为分隔符,所以会返回大量单个空格和空字符串的组合。
无正则的备选方案
如果你不想引入正则模块,也可以用itertools.groupby实现:
from itertools import groupby string = "This is a test." result = [''.join(group) for _, group in groupby(string, key=lambda c: c.isspace())] print(result) # 输出和上述方案完全一致
这个方案通过判断字符是否为空格进行分组,将连续的同类型字符合并为列表元素。
内容的提问来源于stack exchange,提问作者Amir Shabani
相关产品推荐
相关产品推荐

