方法一使用 re.sub() 替换连续空白字符importredefreplace_multiple_spaces(s):# 将一个或多个空白字符替换为单个空格patternr\sreturnre.sub(pattern, ,s)# 测试textHello World This is a testresultreplace_multiple_spaces(text)print(f原始:{repr(text)})print(f处理后:{repr(result)})# 输出: Hello World This is a test方法二只替换空格不包括制表符、换行符importredefreplace_multiple_spaces_only(s):# 只将连续的空格替换为单个空格保留制表符和换行符patternr returnre.sub(pattern, ,s)# 测试textHello World\t\tTabbed\n\nNewLineresultreplace_multiple_spaces_only(text)print(f原始:{repr(text)})print(f处理后:{repr(result)})# 输出: Hello World\t\tTabbed\n\nNewLine方法三更精确的控制importredefnormalize_spaces(s,preserve_newlinesTrue): 标准化空格 :param s: 输入字符串 :param preserve_newlines: 是否保留换行符 :return: 处理后的字符串 ifpreserve_newlines:# 先按行分割处理每行的空格再合并liness.split(\n)processed_lines[re.sub(r , ,line)forlineinlines]return\n.join(processed_lines)else:# 替换所有连续空白字符为单个空格returnre.sub(r\s, ,s)# 测试textHello World This is a test With multiple spacesresult1normalize_spaces(text,preserve_newlinesTrue)print(保留换行符:)print(result1)print()result2normalize_spaces(text,preserve_newlinesFalse)print(不保留换行符:)print(result2)方法四同时处理开头和结尾的空格importredefclean_and_normalize_spaces(s): 清理字符串去除首尾空格并将中间多个空格替换为一个空格 # 先替换连续空白字符为单个空格sre.sub(r\s, ,s)# 去除首尾空格returns.strip()# 测试text Hello World This is a test resultclean_and_normalize_spaces(text)print(f原始:{repr(text)})print(f处理后:{repr(result)})# 输出: Hello World This is a test方法五使用 split() 和 join()无需正则defreplace_spaces_simple(s): 使用 split() 和 join() 方法替换多个空格 # split() 默认按空白字符分割并自动去除空字符串# join() 用单个空格连接return .join(s.split())# 测试textHello World This is a testresultreplace_spaces_simple(text)print(f原始:{repr(text)})print(f处理后:{repr(result)})# 输出: Hello World This is a test完整示例对比importredefcompare_methods(text):print(f原始文本:{repr(text)}\n)# 方法1: 正则替换所有空白字符result1re.sub(r\s, ,text)print(f方法1 (替换所有空白字符):{repr(result1)})# 方法2: 正则只替换空格result2re.sub(r , ,text)print(f方法2 (只替换空格):{repr(result2)})# 方法3: split/joinresult3 .join(text.split())print(f方法3 (split/join):{repr(result3)})# 方法4: 清理并标准化result4re.sub(r\s, ,text).strip()print(f方法4 (清理并标准化):{repr(result4)})# 测试test_text Hello World\t\tTabbed\n\nNewLine compare_methods(test_text)输出示例原始文本: Hello World\t\tTabbed\n\nNewLine 方法1 (替换所有空白字符): Hello World Tabbed NewLine 方法2 (只替换空格): Hello World\t\tTabbed\n\nNewLine 方法3 (split/join): Hello World Tabbed NewLine 方法4 (清理并标准化): Hello World Tabbed NewLine性能对比importtimeit textHello World This is a test*1000# 方法1: 正则替换所有空白字符defmethod1():returnre.sub(r\s, ,text)# 方法2: 正则只替换空格defmethod2():returnre.sub(r , ,text)# 方法3: split/joindefmethod3():return .join(text.split())print(正则替换所有空白字符:,timeit.timeit(method1,number1000))print(正则只替换空格:,timeit.timeit(method2,number1000))print(split/join方法:,timeit.timeit(method3,number1000))推荐方案最简单高效使用 .join(s.split())- 无需正则自动处理所有空白字符需要保留特定字符使用re.sub(r , , s)- 只替换空格需要更精确控制使用re.sub(r\s, , s).strip()- 替换所有空白字符并去除首尾空格根据您的具体需求选择合适的方法。对于大多数情况 .join(s.split())是最简单且高效的解决方案。