我需要在“文本”级别的HTML文件中进行一些替换,也就是说,我不能使用HTML解析器,因为我没有使用标记。
例如,我需要将var hls = new Hls(config);
替换为
var config = {
xhrSetup: function(xhr, url){
xhr.withCredentials = true;
}
}
var hls = new Hls(config);
我发现replace
函数在匹配多行字符串(如</script>\n</body>
时)会考虑空格,例如在</script>
</script>
</body>
</html>
我需要replace('</script>\n </body>', 'alert(1);\n</script>\n</body>')
。
由于我将使用不同的文件,有些可能使用2个字符缩进,其他4个...我有兴趣删除所有前导空格,以便之前的片段变为:
var config = {
xhrSetup: function(xhr, url){
xhr.withCredentials = true;
}
}
var hls = new Hls(config);
或
</script>
</body>
</html>
那么,独立于文件,我可以replace('</script>\n</body>', 'alert(1);\n</script>\n</body>')
我尝试使用lstrip()
,但似乎没有做任何事情。那就是:
with open('web.html') as web_page:
web = web_page.read()
print(web.lstrip())
不会删除前导空格。 replace(' ', '')
不是一个选项,因为它会破坏代码(例如varconfig={
)。
TL; DR; 如何阅读Web文件并删除Python中的所有前导空格?
答案 0 :(得分:2)
您的代码的问题在于您read
整个HTML文件和lstrip
整个事情,即您只剥离第一行(可能没有任何缩进)。
相反,您必须单独读取行或在阅读后拆分行,然后将lstrip
应用于每一行。
for line in web_page: # read file one line at a time
print(line.lstrip())
# read file en block, but split lines afterwards
print("\n".join(map(str.lstrip, web.splitlines())))
或者使用正则表达式^\s+
作为&#34;行开头处的空格&#34;:
import re
print(re.sub(r"^\s+", "", web, flags=re.M))
但是,除了删除前导空格之外,您还可以使用正则表达式进行实际替换,使用\s*
表示任意数量的空格,并\1
重新插入匹配的确切文本,包括原始的空白。
print(re.sub(r"(</script>\s*</body>)", r"alert(1);\1", web, flags=re.M))
答案 1 :(得分:-2)
看一下苗条的图书馆: https://pypi.python.org/pypi/slimmer/
slimmer.py是CSS,HTML和XHTML输出的空白优化器。