使用正则表达式将空白字符折叠为单个空格或换行符
文本空白清理的简便实现方法
核心思路
分两步处理,先统一合并含换行的空白块,再处理纯空格类空白:
- 将所有包含换行符(\r/\n)的连续空白块替换为单个
\n - 将**剩余不含换行的连续空白(空格、制表符等)**替换为单个空格
- 最后去除首尾可能残留的空白字符
正则实现示例(以Python为例)
import re # 原始杂乱文本 raw_str = "\r\r \r\n \r\nSome interesting text on line one...\r\n And line two \r\n" # 第一步:合并含换行的空白块为单个\n processed = re.sub(r'(?:[ \t]*(?:\r|\n)[ \t]*)+', '\n', raw_str) # 第二步:合并纯空白为单个空格 processed = re.sub(r'[ \t]+', ' ', processed) # 去除首尾空白(包括多余的\n) final_result = processed.strip() print(repr(final_result)) # 输出:'Some interesting text on line one...\nAnd line two'
正则说明
- 第一步正则
(?:[ \t]*(?:\r|\n)[ \t]*)+:匹配被空格/制表符包围的一个或多个换行序列,确保所有连在一起的换行(不管中间夹了多少空格)都合并成一个\n - 第二步正则
[ \t]+:仅匹配不含换行的连续空白,替换为单个空格,避免破坏已经处理好的换行结构
其他语言适配
这个逻辑可以直接移植到支持正则的语言,只需调整正则替换的语法:
- JavaScript示例:
const rawStr = "\r\r \r\n \r\nSome interesting text on line one...\r\n And line two \r\n"; let processed = rawStr.replace(/(?:[ \t]*(?:\r|\n)[ \t]*)+/g, '\n'); processed = processed.replace(/[ \t]+/g, ' '); const finalResult = processed.trim(); console.log(finalResult);
内容的提问来源于stack exchange,提问作者Basic
相关产品推荐
相关产品推荐

