删除Python中的多行HTML

删除Python中的多行HTML,python,html,regex,python-3.x,Python,Html,Regex,Python 3.x,我正在尝试剥离特定的HTML文档块,特别是Javascript()和内联CSS()。目前我正在尝试使用re.sub(),但在多行方面没有任何运气。有什么建议吗 import re s = '''<html> <head> <title>Some Template</title> <script type="text/javascript" src="{path to Library}/base.js"></script&

我正在尝试剥离特定的HTML文档块,特别是Javascript(
)和内联CSS(
)。目前我正在尝试使用
re.sub()
,但在多行方面没有任何运气。有什么建议吗

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))
重新导入
s='''
一些模板
//HelloWorld模板
编写(examples.simple.helloWorld());
'''
打印(re.sub(“”,’,s,计数=0,标志=re.M))

您实际上需要的是点所有修饰符,而不是多行修饰符

print(re.sub(r'(?s)<script\b.*?</script>', '', s))

或者,由于您正在解析和修改HTML,我建议使用类似的HTML解析器

如果您只是想剥离/删除HTML树中的所有
script
标记。您可以使用或

.extract()
将返回提取的标记,而
.decompose()
将简单地销毁它


如注释中所述,您可以对HTML树进行其他修改。有关更多信息,请参阅。

为什么不选择?@JasonEstibeiro我对BeautifulSoup的理解并不广泛,但我所有的用途都是解析HTML和提取内容。我只想清除其中的一部分,并将其他部分(如粗体和斜体标记)转换为不同的标记。我不知道BS4能做到这一点。好吧,你可以清除HTML的一部分。看看这个,你甚至可以通过改变HTML树的标签名和/或属性来修改它。看一看这个。@JasonEstibeiro哈。。。我会的。在回答的时候把它吐出来,功劳就归你了。
print(re.sub(r'(?s)\s*<script\b.*?</script>', '', s))
from bs4 import BeautifulSoup

soup = BeautifulSoup(s, "html.parser")
for i in soup('script'):
    i.decompose()

print(soup)