You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用BS和Python移除打印文本中的空行、 及空白字符?

用BeautifulSoup和Python清理文本:移除空行、\r和多余空白

嘿,作为编程新手能想到用BeautifulSoup处理文本真的很棒!我来一步步帮你搞定移除空行、回车符(\r)和多余空白字符的问题~

核心思路

我们需要先从HTML中提取文本,再对文本做针对性清理:

  • 先移除所有回车符\r
  • 再清理空行(包括只含空格/制表符的无效行)和每行首尾的多余空白

完整代码示例

from bs4 import BeautifulSoup
import re

# 替换成你自己的HTML内容
html_content = """
<div class="target-content">
    这是一段测试文本!
    
    这里夹杂着空行
    和多余的空格   还有\r回车符。
    
    这是最后一行内容。
</div>
"""

# 1. 解析HTML并提取原始文本
soup = BeautifulSoup(html_content, "html.parser")
raw_text = soup.get_text()

# 2. 逐步清理文本
# 第一步:移除所有\r回车符
cleaned_text = raw_text.replace("\r", "")

# 第二步:移除空行(包括只含空白字符的行)
cleaned_text = re.sub(r"\n\s*\n", "\n", cleaned_text)

# 第三步:移除每行首尾的空白字符
cleaned_text = re.sub(r"^\s+|\s+$", "", cleaned_text, flags=re.MULTILINE)

# 可选:如果需要把文本中所有连续空格合并成单个空格,添加这一行
# cleaned_text = re.sub(r"\s+", " ", cleaned_text)

# 打印最终结果
print(cleaned_text)

代码细节解释

  • soup.get_text():从HTML中提取所有可见文本,但会保留原始的换行、空格和回车符
  • raw_text.replace("\r", ""):直接替换掉所有回车符\r,避免它干扰后续的换行处理
  • re.sub(r"\n\s*\n", "\n", cleaned_text):用正则匹配两个换行之间的任意空白字符(空格、制表符等),替换成单个换行,彻底移除空行
  • re.sub(r"^\s+|\s+$", "", cleaned_text, flags=re.MULTILINE)re.MULTILINE让正则匹配每一行的开头和结尾,精准移除每行前后的多余空白
  • 可选的合并空格步骤:如果你的需求是把文本变成更紧凑的格式(比如把段落整合成一行或规范的单空格分隔),就加上那行代码

示例效果对比

原始提取的文本(大致):

这是一段测试文本!
    
    这里夹杂着空行
    和多余的空格   还有回车符。
    
    这是最后一行内容。

清理后的输出:

这是一段测试文本!
这里夹杂着空行
和多余的空格   还有回车符。
这是最后一行内容。

如果开启了合并空格的可选步骤,输出会变成:

这是一段测试文本! 这里夹杂着空行 和多余的空格 还有回车符。 这是最后一行内容。

内容的提问来源于stack exchange,提问作者Daveabuk

火山引擎 最新活动