【发布时间】:2014-11-04 10:38:04
【问题描述】:
我需要替换网页源代码中的所有 HTML 标签(例如<p>、<img> 等),但我想保留<br> 和<br/>。我试过了:
re.sub(r'<[^>]+?>', u'', html, flags=re.I)
这只能达到第一个目标,但不能保留<br>或<br/>。 r'<[^>br]+?>' 也达不到目的。
什么是正确的正则表达式?
【问题讨论】:
-
不要使用正则表达式来操作 HTML - HTML 不是常规语言。使用 HTML 解析器。 (Amusing version.)
-
@jonrsharpe 我知道你指的是 BeautifulSoup 等。但我不想为这个简单的问题安装另一个插件。
-
标准库中也有解析器:
HTMLParser。 -
有一天人们会停止尝试用锤子拧开螺栓(也就是使用正则表达式解析 html)?
-
我对您提出的另一个问题有正确答案,但您出于某种原因将其删除。
re.sub(r"((<br\/?>)+)", "<br>", html, flags=re.I|re.UNICODE)你遇到的问题是你错过了flags关键字,所以它把re.I|re.UNICODE当作countkwarg,将它限制为只有前 33 个替换 - 这让它看起来什么都不是发生,因为您只查看输入文本的最后一行。我在这里回答是因为无法向您发送答案。