2017-02-25 133 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

太棒了 - 您的第一個解決方案完美無缺! –

相關問題