如何使用C#删除两个方括号标记之间的所有内容

时间:2018-08-07 12:55:02

标签: c# regex

输入:我发现[B]不是[/ B]执行此操作的一种方法。

输出将是:我发现这样做的一种方法。

我的代码:

string input = "I found [B]not a[/B] a single way [B]to do[/B] doing this.";

string regex = "\\[(.*?)\\]";
string output = Regex.Replace(input, regex, "");
Console.WriteLine(output);

3 个答案:

答案 0 :(得分:1)

所以这是一个经过测试的解决方案,它可以正常工作:

  string output = Regex.Replace("I found [B]not a[/B] a single way [B]to do[/B] doing this.", @"\[.?\].*?\[\/.?\]", "");

如何?好了,技巧是删除匹配[something] [/something]之间的所有内容,标记之间的文本表示为.?

答案 1 :(得分:1)

这应该可以解决问题:

Regex.Replace("I found [B]not a[/B] a single way [B]to do[/B] doing this.", @"\[(.*?)].*?\[/\1]", "", RegexOptions.IgnoreCase);

打破现状

  • \[(.*?)]-这将匹配[]中的任何标签,例如[B],并捕获标签(不包括[])
  • .*?会将所有内容匹配到模式的下一个部分
  • \[/\1]将匹配相应的[/ TAG]

我随意添加了IgnoreCase,以便它不区分大小写地匹配。

答案 2 :(得分:0)

尝试以下模式:\[[^\]]+\]

说明:它将首先匹配[,然后匹配所有非]的内容,直到]

Demo