正则表达式清除分隔符之间的文本数据

时间:2015-07-14 13:14:13

标签: c# regex

我有一些我想要处理的数据。它看起来像这样:

[data]3456[/data]df[data]3424[/data]33[data]4324[/data]2214[data]3421[/data].. goes on

[/data]&之间的任何内容[data]标签只是我需要在可以进一步使用数据之前删除的填充程序。所以我基本上试图删除df33& 2214在上述情况中。我试图使用正则表达式但我没有很多使用它们的经验。数据位于.txt文件中,并逐行读取。任何帮助将不胜感激!

while((line = reader.ReadLine()) !=null)
{
writer.WriteLine(Regex.Replace(line, ?? ,));
}

小问题编辑: 这种情况也是可能的:

[data]3456[/data]456
435[data]4532[/data]

在这种情况下该怎么办?

2 个答案:

答案 0 :(得分:2)

方法1

我们只收集所有[data]...[/data]

// Declare the regex as a private static readonly field
private static readonly Regex rx = new Regex(@"\[data\].*?\[/data\]", RegexOptions.Compiled);
// and then in the caller ....
writer.WriteLine(string.Join(string.Empty, rx.Matches(line).Cast<Match>().Select(p => p.Value).ToArray()));

方法2

您可以使用以下正则表达式进行搜索&amp;替换操作:

[^[\]]*(\[data\][^[]*\[/data\])[^[\]]*

$1作为替代。

请参阅demo,结果为[data]3456[/data][data]3424[/data][data]4324[/data][data]3421[/data](对于输入1)或[data]3456[/data][data]4532[/data]对于输入2(请参阅上下文标签)。

在C#中:

writer.WriteLine(Regex.Replace(line, @"[^[\]]*(\[data\][^[]*\[/data\])[^[\]]*", "$1"));

方法3

或者,您可以使用Regex.Split进一步string.Join()

var splts = Regex.Split(line, @"(?<=\[data\].*?\[/data\]).*?(?=\[data\]|$)");
writer.WriteLine(string.Join("", splts));

请参阅IDEONE demo

答案 1 :(得分:2)

Console.WriteLine(Regex.Replace("[data]3456[/data]df[data]3424[/data]33[data]4324[/data]2214[data]3421[/data]",
    @"(?<=\[/data\]).*?(?=\[data\])", string.Empty));

替换[/data][data]

之间的值