如何通过python忽略正则表达式中的html注释标签

Posted

技术标签:

【中文标题】如何通过python忽略正则表达式中的html注释标签【英文标题】:How to Ignore html comment tag in regex through python 【发布时间】:2021-08-25 19:30:09 【问题描述】:

我正在用一些 asci 代码替换特殊字符,并在下面的正则表达式的帮助下忽略 html 标签

text_list = re.findall(r'>([\S\s]*?)<', html)

所以它忽略了我们想要的所有 html 标记,但没有忽略 html 注释结束标记“-->”。

任何帮助表示赞赏。 我应该在正则表达式中更改什么。

附上截图供大家参考。

【问题讨论】:

为什么要在 HTML 中使用正则表达式?使用 HTML 解析器,例如 BeautifulSoup。 我们不能使用汤,因为我正在返回修改文件。 您说的是“忽略”和“替换”,但它并没有完全解释您对正则表达式所做的事情。您需要展示更多代码或更好地解释它。 谁说不能使用 BeautifulSoup 修改文件? 你能给我举个例子,我可以在 beautifulSoup 的帮助下用 asci 代码替换特殊字符。真的很有帮助.. 【参考方案1】:

请尝试边读文件请传递多个编码参数

【讨论】:

【参考方案2】:

您可以匹配它们并使用re.findall 丢弃:

text_list = list(filter(None, re.findall(r'(?s)<!--.*?-->|>(.*?)<', html)))
# Or, a bit more efficient:
text_list = list(filter(None, re.findall(r'<!--[^-]*(?:-(?!->)[^-]*)*-->|>([^<]*)<', html)))

见this regex demo(和second one)。

正则表达式匹配&lt;!----&gt; 之间的子字符串,并匹配&lt;&gt; 之间的子字符串,捕获后两个分隔符之间的文本到组1 和re.findall 中如果模式中有捕获组,则返回捕获。

见Python demo:

import re
html = "<a href='link.html'>URL</a>Some text <!-- Comment --><p>Par here</p>More text"
text_list = list(filter(None, re.findall(r'(?s)<!--.*?-->|>(.*?)<', html)))
print(text_list)
# => ['URL', 'Some text ', 'Par here']

【讨论】:

感谢您的回复,我已经尝试过了,但它不起作用..它给出了相同的输出。 @VishalJ 这意味着您要么有不同的输入,要么您实际上并没有使用我的解决方案。如果您需要更多帮助,请使用ideone.com/hVQi1F 告诉我 有哪些代码和输入(单击fork,编辑代码,运行,然后与我分享新链接)。

以上是关于如何通过python忽略正则表达式中的html注释标签的主要内容,如果未能解决你的问题,请参考以下文章

Python 松散正则表达式

(php) 正则表达式删除注释但忽略字符串中的出现

python与正则表达式:re模块详解

Java正则表达式忽略/注释掉正则表达式的一部分[重复]

python与正则表达式:re模块详解

通过正则表达式python爬取指定网页中的参数内容,保存到指定数据文件中