替换所有 HTML 标记,除了一些在 Python 中使用正则表达式的标记

Replace all HTML tags except some using Regex in Python

提问人:Knocks 提问时间:10/21/2023 更新时间:10/21/2023 访问量:51

问:

我正在尝试使用正则表达式和 Python 将所有 HTML 标签替换为两个例外。

现在这是我正在使用的正则表达式: 这是我试图“清理”的示例文本:<\/?(?!(?:em|strong)\b)[a-z](?:[^>\"']|\"[^\"]*\"|'[^']*')*>

<p><em>test text</em></p>
<p><strong>test test test</strong></p>
<div>some other text</div>
<div></div>
<div></div>
<div>

输出如下:

test text
test test test
some other text

即使它应该是:

<em>test text</em>
<strong>test test test</strong>
some other text

我用来测试一切的代码是:

import re

text = '''<p><em>test text</em></p>
<p><strong>test test test</strong></p>
<div>some other text</div>
<div></div>
<div></div>
<div>'''

res = re.sub("<\/?(?!(?:em|strong)\b)[a-z](?:[^>\"']|\"[^\"]*\"|'[^']*')*>", '', text)

print(res.strip())

现在我相信正则表达式是首选,因为我必须清理的文本来自 API,所以它不会以任何方式扩展。

有什么建议吗?为什么它取代了“em”和“strong”标签,即使有负面的展望?

python-3.x 正则表达式

评论

0赞 President James K. Polk 10/21/2023
感觉到力量的涟漪......
2赞 Simon MᶜKenzie 10/21/2023
除了您的特定问题之外,正则表达式并不适合 html(html 不是一种常规语言)。也许解析器会更好......?stackoverflow.com/questions/11709079/parsing-html-using-python
0赞 CAustin 10/21/2023
如果您只是想摆脱除所有标签之外的所有标签,为什么要为所有的平衡/嵌套逻辑而烦恼呢?只需使用 like 并将其替换为 “”。emstrong<\/?(?!em|strong)\w+>
0赞 CAustin 10/21/2023
@SimonMcKenzie 如果 HTML 输入格式不正确,解析器将无法工作。看起来 OP 只是想做一个简单的字符串替换,所以这不应该超出基本的正则表达式功能。
0赞 Simon MᶜKenzie 10/21/2023
你@CAustin提出了一个合理的观点,但对于解析器和格式错误的 html 来说,情况并非如此。例如,解析器将以与浏览器相同的方式解析 html,并且可以处理格式错误的输入。html5lib

答: 暂无答案