2017-02-25 98 views
0

我想删除多对括号中的每一对之间包含的文本。如何删除多对括号之间的文本?

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); 

这工作得很好:如果只有一对字符串中括号下面的代码工作正常!

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

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); 

这是一个问题!

我很为难 - 我敢肯定有一个简单的解决方案,但我的想法......

帮助最欢迎!

+1

尝试'*'而不是'*' - 即macth尽可能少 –

+0

另一种可能性是改变'*'到'[^)] *?。 ' - 除了右括号之外的任何符号。 –

+0

天才 - 你的第一个解决方案完美的作品! –

回答

3

你有两个主要的可能性:

  • 变化.*.*?即匹配尽可能少从而匹配)地:

    text = Regex.Replace(text, @"\(.*?\)", ""); 
    text = Regex.Replace(text, @"\s{2,}", " "); // let's exclude trivial replaces 
    
  • 变化.*[^)]*即匹配任何符号除了) LS:

    text = Regex.Replace(text, @"\([^)]*\)", ""); 
    text = Regex.Replace(text, @"\s{2,}", " "); 
    
+0

太棒了 - 您的第一个解决方案完美无缺! –

相关问题