如何移除字符串中多余空格但保留换行符\n?
保留换行符的同时压缩连续空格
给定字符串:
s = 'Hello \nWorld!\nToday is a wonderful day'
需要将其中连续的多个空格替换为单个空格,但保留换行符,得到结果:
'Hello \nWorld!\nToday is a wonderful day'
之前使用split()+join()或re.sub(r"\s+", " ", s)的方法会把换行符也替换成空格,导致结果不符合预期——这是因为split()会分割所有空白字符(包括换行),而\s+会匹配所有空白类型(空格、换行、制表符等)。
正确解决方案
使用正则表达式仅匹配连续的空格字符,而非所有空白:
import re s = 'Hello \nWorld!\nToday is a wonderful day' processed_str = re.sub(r' +', ' ', s) print(repr(processed_str))
运行后输出:
'Hello \nWorld!\nToday is a wonderful day'
扩展:处理其他空白(如制表符)但保留换行
如果字符串中存在制表符等其他空白字符,且希望将它们也替换为单个空格但保留换行,可以使用:
processed_str = re.sub(r'[^\S\n]+', ' ', s)
这里[^\S\n]表示匹配除了非空白字符(\S)和换行符(\n)之外的所有空白字符,替换后仍会保留原有的换行结构。
内容的提问来源于stack exchange,提问作者ArtGMlg
相关产品推荐
相关产品推荐

