如何用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




