如何使用Python清理包含多余换行符的HTML代码?
解决HTML文本换行与标签拆分问题
你的核心问题是逐行处理无法跨行合并标签内的分散文本,换用整体读取+正则匹配的方式就能一次性解决所有问题。
实现思路
- 一次性读取整个HTML文件内容,避免逐行处理的局限性
- 用正则表达式匹配
<h1>、<p>这类标签块,将块内的换行、多余空格清理合并 - 保留标签外的原有缩进和结构,只处理标签内的文本内容
完整代码示例
import re html_filename = 'page.htm' # 读取整个文件内容 with open(html_filename, encoding="utf-8") as f: content = f.read() # 定义处理标签内文本的函数 def clean_tag_content(match): # 获取标签名和内部文本 tag = match.group(1) text = match.group(2) # 去掉文本中的换行,将多个空格替换为单个空格 cleaned_text = re.sub(r'\s+', ' ', text.strip()) # 拼接成格式化后的标签 return f'<{tag}>{cleaned_text}</{tag}>' # 匹配<h1>和<p>标签块,应用清理函数 pattern = r'<(h1|p)>\s*(.*?)\s*</\1>' formatted_content = re.sub(pattern, clean_tag_content, content, flags=re.DOTALL) # 写入处理后的内容 with open(html_filename, 'w', encoding="utf-8") as f: f.write(formatted_content)
代码说明
re.DOTALL让正则的.能匹配换行符,确保跨行的文本也能被完整捕获clean_tag_content函数负责清理标签内的文本:strip()去掉首尾空白,re.sub(r'\s+', ' ', ...)把所有连续的换行、空格替换为单个空格- 正则模式
r'<(h1|p)>\s*(.*?)\s*</\1>'精准匹配成对的<h1>/<p>标签,\1保证标签闭合的一致性
运行后就能得到你想要的格式:标签内文本合并为一行,同时保留外部的缩进和结构。
内容的提问来源于stack exchange,提问作者mbrown1963
相关产品推荐
相关产品推荐

