如何删除文本首尾空行或全空白行且保留中间行的空白字符?
文本首尾空行修剪方案
你之前想的正向+反向遍历逻辑本身就是性能最高的实现,针对大文本场景的开销远低于正则,实现起来也很简单,大部分语言几行代码就能写完,完全符合你的需求:仅删除首尾全空白行,中间内容包括行前后空格、中间空行全部保留。
下面是不同场景的具体实现:
主流编程语言实现
Python 实现
def trim_edge_empty_lines(content: str) -> str: # 保留换行符拆分所有行 lines = content.splitlines(keepends=True) # 找第一个非全空白行的位置 start = 0 while start < len(lines) and lines[start].isspace(): start += 1 # 全空白文本直接返回空 if start == len(lines): return "" # 找最后一个非全空白行的位置 end = len(lines) while end > start and lines[end - 1].isspace(): end -= 1 # 拼接结果 return "".join(lines[start:end])
Java 实现
public String trimEdgeEmptyLines(String content) { String[] lines = content.split("\\R", -1); int start = 0; while (start < lines.length && lines[start].isBlank()) { start++; } if (start == lines.length) { return ""; } int end = lines.length; while (end > start && lines[end - 1].isBlank()) { end--; } return String.join("\n", java.util.Arrays.copyOfRange(lines, start, end)); }
Shell 单行实现
如果是在命令行处理文件,可以直接用awk:
awk 'NR==FNR{if(!/^[[:space:]]*$/)last=FNR;next}FNR>last{exit}p||!/^[[:space:]]*$/{p=1;print}' input.txt input.txt
正则方案的适用场景
如果你的处理场景中文本大小普遍在1MB以内,正则的性能差距完全可以忽略,你现在用的正则已经足够用,不需要额外改造。只有处理几十MB以上的大文本时,显式遍历的性能优势才会明显体现。
内容的提问来源于stack exchange,提问作者Moige
相关产品推荐
相关产品推荐

