Regex从分隔符之间的文本中清除数据

本文关键字:清除 数据 文本 分隔符 之间 Regex | 更新日期: 2023-09-27 18:02:41

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

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

[/data]&[data]标签只是填充物,在数据可以进一步使用之前,我需要删除它。所以我基本上是在尝试删除df33&CCD_ 5。我正在尝试使用正则表达式,但我没有太多使用它们的经验。数据在.txt文件中,并且逐行读取。任何帮助都将不胜感激!

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

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

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

遇到这种情况该怎么办?

Regex从分隔符之间的文本中清除数据

方法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

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

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

$1替代。

请参阅演示,结果为[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演示

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] 之间的值