如何删除多对括号之间的文本?

时间:2017-02-25 18:46:29

标签: c# regex

我想删除多对括号中的每一对之间包含的文字。如果字符串中只有一对括号,则下面的代码可以正常工作:

var text = "This (remove me) works fine!";

// Remove text between brackets.
text = Regex.Replace(text, @"\(.*\)", "");

// Remove extra spaces.
text = Regex.Replace(text, @"\s+", " ");

Console.WriteLine(text);
  

这很好用!

但是,如果字符串中包含多个括号集,则会删除太多文本。 Regex表达式删除FIRST左括号和最后一个右括号之间的所有文本。

var text = "This is (remove me) not (remove me) a problem!";

// Remove text between brackets.
text = Regex.Replace(text, @"\(.*\)", "");

// Remove extra spaces.
text = Regex.Replace(text, @"\s+", " ");

Console.WriteLine(text);
  

这是一个问题!

我很难过 - 我确定这是一个简单的解决方案,但我没有想法......

非常欢迎!

2 个答案:

答案 0 :(得分:4)

您有两种主要可能性:

  • .*更改为.*?,即尽可能少地匹配 ,从而尽可能早地将<{1}}与匹配

    )
  • text = Regex.Replace(text, @"\(.*?\)", ""); text = Regex.Replace(text, @"\s{2,}", " "); // let's exclude trivial replaces 更改为.*,即匹配 [^)]*以外的所有符号:

    )

答案 1 :(得分:0)

c#中的工作示例,它将处理花括号“ {”,因此结果将是.. {{pc_mem_kc}}

string str = "{{pc_mem_kc}}   of members were health (test message)";
var pattern = @"\{.*?\}}";
var data11 = Regex.Matches(str, pattern, RegexOptions.IgnoreCase);