如何在保留HTML标签/结构的情况下查找/替换文本

7 投票
6 回答
4678 浏览
提问于 2025-04-15 16:44

我用正则表达式来处理文本,想要按照自己的需求进行转换,但我希望保留HTML标签。比如说,如果我想把“stack overflow”替换成“stack underflow”,那么应该像这样工作:如果输入是 stack <sometag>overflow</sometag>,我得到的结果应该是 stack <sometag>underflow</sometag>(也就是说,字符串的替换完成了,但标签依然保留在那儿...)

6 个回答

3

请注意,随意的替换操作可能会出现不明确的情况。看看下面的例子:

1)

HTML:

A<tag>B</tag>

模式 -> 替换:

AB -> AXB

可能的结果:

AX<tag>B</tag>
A<tag>XB</tag>

2)

HTML:

A<tag>A</tag>A

模式 -> 替换:

A+ -> WXYZ

可能的结果:

W<tag />XYZ
W<tag>X</tag>YZ
W<tag>XY</tag>Z
W<tag>XYZ</tag>
WX<tag />YZ
WX<tag>Y</tag>Z
WX<tag>YZ</tag>
WXY<tag />Z
WXY<tag>Z</tag>
WXYZ

适合你情况的算法类型,主要取决于你可能搜索的模式和处理模糊情况的规则。

3

Beautiful Soup 或者 HTMLParser 是你的解决方案。

10

在处理和修改HTML时,建议使用DOM库,而不是正则表达式:

  • lxml:一个解析器,可以处理文档和HTML,还可以使用BeautifulSoup和html5lib来解析。
  • BeautifulSoup:一个解析器,可以处理文档和HTML。
  • html5lib:一个解析器,也有一个序列化功能。
  • ElementTree:一个文档对象和XML序列化工具。
  • cElementTree:一个以C扩展实现的文档对象。
  • HTMLParser:一个解析器。
  • Genshi:包含解析器、文档和HTML序列化功能。
  • xml.dom.minidom:标准库中内置的文档模型,可以被html5lib解析。

内容摘自 http://blog.ianbicking.org/2008/03/30/python-html-parser-performance/

在这些选项中,我推荐使用lxml、html5lib和BeautifulSoup。

撰写回答