我有一些我想要处理的数据。它看起来像这样:
[data]3456[/data]df[data]3424[/data]33[data]4324[/data]2214[data]3421[/data].. goes on
[/data]
&之间的任何内容[data]
标签只是我需要在可以进一步使用数据之前删除的填充程序。所以我基本上试图删除df
,33
& 2214
在上述情况中。我试图使用正则表达式但我没有很多使用它们的经验。数据位于.txt
文件中,并逐行读取。任何帮助将不胜感激!
while((line = reader.ReadLine()) !=null)
{
writer.WriteLine(Regex.Replace(line, ?? ,));
}
小问题编辑: 这种情况也是可能的:
[data]3456[/data]456
435[data]4532[/data]
在这种情况下该怎么办?
答案 0 :(得分:2)
我们只收集所有[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()));
您可以使用以下正则表达式进行搜索&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"));
或者,您可以使用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]