正则表达式删除特定标记之前的内容

时间:2012-09-09 17:27:27

标签: regex

如何在某些标记/文字之前删除内容,例如我想在此评论之前删除所有内容:

    <!-- article begins -->

我希望在

之后删除所有内容
    <!-- article ends -->

4 个答案:

答案 0 :(得分:1)

Python示例(您没有说出您想要的语言):

import re
reobj = re.compile(".*?<!-- article begins -->(.*)<!-- article ends -->.*", re.DOTALL)
result = reobj.sub(r"\1", subject)

这也删除了标签。它假设article begins/ends中只有一个subject对。

答案 1 :(得分:1)

C#(不需要正则表达式)。

string start = "<!-- article begins -->";
string end = "<!-- article ends -->";

var article = text.Split(new string[] { start, end }, 
                         StringSplitOptions.RemoveEmptyEntries)[1];

答案 2 :(得分:0)

取决于您的正则表达式引擎。他们几乎都有一种模式,你可以问“。”匹配所有字符,包括换行符。然后你会捕捉到你想要的东西:

.*article begins.....(.*).....article ends.*

我正在使用点作为注释标记,因为其中一些字符是特殊的,具体取决于您的正则表达式引擎。

你可能会看一下awk,它有一个更好的方法:

awk '/article begins/,/article ends/ { print }' filename

指定带有动作的正则表达式范围:

/start pattern/,/end pattern/ { action to do }

答案 3 :(得分:0)

使用sed

sed -n '/<!-- article begins -->/,/<!-- article ends -->/p' yourfile

它不假设只有一对匹配标签