如何通过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)。
正则表达式匹配<!--
和-->
之间的子字符串,并匹配<
和>
之间的子字符串,捕获后两个分隔符之间的文本到组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注释标签的主要内容,如果未能解决你的问题,请参考以下文章