删除文件中的多行

2024-05-23 16:39:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有多个HTML文件,我必须删除其中的一些行。在

我需要删除的行在开头和结尾都没有关键字,除了脚本标记,但是我不想删除这些文件中的所有脚本标记。在

我需要删除的HTML部分示例:

<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXXXXX-X']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>

你认为有可能吗?如果有,怎么办?在

更新

我对下面的@ARJMP解决方案做了一些修改,但是它再次返回相同的文件,而没有删除regex中的analytics标记。在

Regex通过@ARJMPhttps://regex101.com/r/rWLZRD/1正确

为什么regex不减法?在

^{pr2}$

Tags: 文件texthttps标记脚本varhtmltype
1条回答
网友
1楼 · 发布于 2024-05-23 16:39:26

这里有一个regex解决方案,尽管regex不是最好的方法,但是考虑到您非常简单的用例,这可以用来解决您的问题。在

检查脚本标记后跟var _gaq = _gaq,并以第一个出现的</script>结尾的正则表达式

https://regex101.com/r/rWLZRD/1

import re

regex = r"<script type=\"text\/javascript\">\s+var _gaq = _gaq .*</script>"

test_str = ("<script type=\"text/javascript\">\n"
    "var _gaq = _gaq || [];\n"
    "_gaq.push(['_setAccount', 'UA-XXXXXXXX-X']);\n"
    "_gaq.push(['_trackPageview']);\n"
    "(function() {\n"
    "var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\n"
    "ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\n"
    "var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n"
    "})();\n"
    "</script>")

matches = re.sub(regex, test_str, re.DOTALL)

好的,所以您还需要对多个文件执行此操作,您可以使用一个脚本遍历一个文件列表并应用regex。此脚本还将生成{file}.backup,因为它修改原始文件。在

^{pr2}$

您还可以使用类似argparse的命令行脚本,该脚本可以接受命令行上的文件名列表,提供创建或不创建备份的选项,等等,但这超出了这个答案的范围。在

相关问题 更多 >