Regex 替换一堆文件中的一堆行

Regex 替换一堆文件中的一堆行,regex,Regex,假设我有数千个HTML文件,里面有一些文本(实际上是文章)。此外,假设这些HTML中有各种各样的脚本、样式、计数器和其他垃圾,在实际文本之上的某个地方 我的任务是替换从一开始到某个标记的所有内容,即,我们从开始,以结束,并使用一个清晰的标记 <html> <head> </head> <body> 街区 有什么正则表达式可以让我这么做吗?维姆?还有其他编辑吗?脚本语言 谢谢。最简单的正则表达式是(?s)\A.*(?=)(假设您想保留标记)。将

假设我有数千个HTML文件,里面有一些文本(实际上是文章)。此外,假设这些HTML中有各种各样的脚本、样式、计数器和其他垃圾,在实际文本之上的某个地方

我的任务是替换从一开始到某个标记的所有内容,即,我们从
开始,以
结束,并使用一个清晰的标记

<html>
<head>
</head>
<body>

街区

有什么正则表达式可以让我这么做吗?维姆?还有其他编辑吗?脚本语言


谢谢。

最简单的正则表达式是
(?s)\A.*(?=)
(假设您想保留
标记)。将其替换为问题中的文本

说明:

(?s)#允许点匹配换行符
\A#将搜索锚定在字符串的开头
.*?    # 匹配任意数量的字符,尽可能少
(?=)#在这之前停下来

当然,如果文本
也可能出现在实际标记上方的注释或文本字符串中,则此操作将失败。

我建议使用HTML解析器。您使用哪种语言进行此操作?您正在尝试做什么?寻求一种方法来实现你认为最好的解决方案可能不是最好的问题。@RamchandraApte:我认为这不是一个好主意。正则表达式在这里要简单得多(使用解析器,您必须解析树,找到第一个相关的
div
标记,删除之前的所有标记和内容等等。)@TimPietzcker如果这样做,您可能会得到无效的HTML。一般来说,在解析复杂的嵌套文档结构(如HTML)时,如果您想重用代码或有灵活的需求,请使用解析器。但是,对于regexp来说,它是否足够琐碎,您必须使用自己的判断……蒂姆,谢谢!它是否可以通过类似的方式与Perl一起工作,您认为如何<代码>perl-pi-w-e的/(?s)\A.*(?=)//g;'*。html@AS:我不懂Perl,所以我不确定这种语法,但您肯定不需要
g
修饰符,应该使用
s
修饰符(并在开始时删除
(?s)
)(.你建议使用哪种语言的正则表达式?随便你喜欢什么-正则表达式应该在除了JavaScript之外的几乎所有现代语言中都能工作(但是你需要为
s
修饰符使用特定于语言的语法)(UltraEdit可以开箱即用,RegexBuddy/PowerGREP给你更多的控制权…)Tim,我在BBEdit(一个支持多文件操作的OS X编辑器)中试过它,它确实有效,谢谢!