Python正则表达式:如何仅替换非开头的多空格为单个空格
解决方法
要保留字符串开头的所有连续空格,仅将非开头位置的多空格替换为单个空格,可以用以下两种方式实现:
方式一:拆分处理(更直观)
先提取字符串开头的所有空格,再对剩余部分替换多空格,最后拼接结果:
import re def clean_spaces(s): # 捕获开头的空格和后续内容 match = re.match(r'^(\s*)(.*)', s) if match: leading_spaces = match.group(1) content = match.group(2) # 替换内容部分的多空格为单个空格 cleaned_content = re.sub(r'\s+', ' ', content) return leading_spaces + cleaned_content return s # 测试示例 string_1 = ' param A val A' string_2 = 'param B val B' print(clean_spaces(string_1)) # 输出: ' param A val A' print(clean_spaces(string_2)) # 输出: 'param B val B'
方式二:单正则直接替换
使用带正向回顾的正则,仅匹配前面有非空白字符的连续空格,替换为单个空格:
import re string_1 = ' param A val A' string_2 = 'param B val B' # 正则 (?<=\S)\s+ 表示:匹配前面有非空白字符的连续空白 result_1 = re.sub(r'(?<=\S)\s+', ' ', string_1) result_2 = re.sub(r'(?<=\S)\s+', ' ', string_2) print(result_1) # 输出: ' param A val A' print(result_2) # 输出: 'param B val B'
正则说明
(?<=\S) 是正向回顾断言,确保当前匹配的空格前面存在至少一个非空白字符(\S 表示非空白),这样就不会匹配字符串开头的连续空格,仅针对中间的多空格进行替换。
内容的提问来源于stack exchange,提问作者Kspr
相关产品推荐
相关产品推荐

