我试图删除特定的HTML文档块,尤其是Javascript(<script></script>
)和内联CSS(<style></style>
)。目前我正在尝试使用re.sub()
,但我对Multiline没有任何好运。有什么提示吗?
import re
s = '''<html>
<head>
<title>Some Template</title>
<script type="text/javascript" src="{path to Library}/base.js"></script>
<script type="text/javascript" src="something.js"></script>
<script type="text/javascript" src="simple.js"></script>
</head>
<body>
<script type="text/javascript">
// HelloWorld template
document.write(examples.simple.helloWorld());
</script>
</body>
</html>'''
print(re.sub('<script.*script>', '', s, count=0, flags=re.M))
答案 0 :(得分:2)
或者,由于您正在解析和修改HTML,我建议使用像BeautifulSoup这样的HTML解析器。
如果您只想删除/删除HTML树中的所有script
标记。您可以使用.decompose()
或.extract()
。
.extract()
将返回已提取的标记,而.decompose()
只会销毁。
from bs4 import BeautifulSoup
soup = BeautifulSoup(s, "html.parser")
for i in soup('script'):
i.decompose()
print(soup)
如评论中所述,您可以对HTML树进行其他修改。您可以参考docs了解更多信息。
答案 1 :(得分:1)
实际上你需要DOTALL修饰符而不是Multiline。
print(re.sub(r'(?s)<script\b.*?</script>', '', s))
这将删除script
标记之前存在的前导空格。
print(re.sub(r'(?s)\s*<script\b.*?</script>', '', s))