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]
标签只是填充物,在数据可以进一步使用之前,我需要删除它。所以我基本上是在尝试删除df
、33
&CCD_ 5。我正在尝试使用正则表达式,但我没有太多使用它们的经验。数据在.txt
文件中,并且逐行读取。任何帮助都将不胜感激!
while((line = reader.ReadLine()) !=null)
{
writer.WriteLine(Regex.Replace(line, ?? ,));
}
对问题进行小编辑:这种情况也是可能的:
[data]3456[/data]456
435[data]4532[/data]
遇到这种情况该怎么办?
方法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]
之间的值