
本文介绍如何通过正则表达式匹配而非分割,准确提取包含起始与结束标签的完整 html 片段(如 `
在处理 HTML 片段时,若目标是按特定成对标记(如 ...
、...
等)切分字符串并保留完整标签结构,直接使用 re.split() 会破坏标签配对关系——它仅在标签处断开,导致起始/结束标签被分离,内容错位。正确做法是改用 re.finditer() 进行匹配(match),主动捕获“开–闭”成对出现的完整标签块。
核心正则表达式如下:
import re pattern = r"<(p|li|ul|ol|dl|h1|h2|h3|h4|h5|h6)>[^<]*\1>" subject = 'Some text some text.
Another text
.
Some text some text.
', 'Another text
', '✅ 关键设计解析:
⚠️ 重要限制与注意事项:
text
✅,但from bs4 import BeautifulSoup
soup = BeautifulSoup(subject, 'html.parser')
for tag in soup.find_all(['p', 'li', 'ul', 'ol', 'dl', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6']):
print(str(tag))? 总结:
正则匹配成对标签是一种轻量级、可控的文本预处理手段,适用于已知结构简单的 HTML 片段(如 CMS 导出内容、模板片段)。但一旦涉及嵌套、动态属性或容错需求,务必转向专业 HTML 解析库——正则不是 HTML 的朋友,DOM 才是。