如何按单个空格分割字符串且保留多余空格?
解决单个空格分隔且保留前导空格元素的问题
没问题!你想要的效果完全可以实现,普通的split方法确实满足不了需求——split()会自动合并所有连续空格,split(" ")则会在连续空格的位置生成空字符串,都没法直接得到带前导空格的元素。
这里给你一个简单的方案,用正则表达式的re.split配合负向回顾后发断言来实现:
import re s = "alpha beta gamma delta" result = re.split(r'(?<! ) ', s) print(result) # 输出: ["alpha", "beta", " gamma", "delta"]
原理说明
正则表达式(?<! ) 的意思是:只分割那些前面不是空格的单个空格。这样一来:
alpha和beta之间的单个空格会被当作分隔符beta后面的两个空格中,第一个空格因前面是beta的字符(非空格)会触发分割,但第二个空格前面是空格,不会被分割,因此会被保留在gamma的开头gamma和delta之间的单个空格同样会被当作分隔符,最终得到你想要的结果
另外还有一种思路,用re.findall直接匹配符合要求的元素:
import re s = "alpha beta gamma delta" result = re.findall(r'\S.*?(?= |$)', s) print(result) # 同样输出: ["alpha", "beta", " gamma", "delta"]
这个正则的逻辑是匹配从非空格字符开始,到下一个空格或字符串结尾的所有内容,自然就能把连续空格中多余的部分留在下一个元素的开头。
内容的提问来源于stack exchange,提问作者Zachary Goshen
相关产品推荐
相关产品推荐

