2017-06-02 37 views
-2

我在字符串中有多個括號。如何更換多支架?

所以,我想替換爲空的所有多個支架。

例如,

string str = "111(222(333(444())))555(666(77(8888)))()"; 
var eliminateBracket = Regex.Replace(str, @"\([^)]*\)", ""); 

在這種情況下我有結果是 「111))555))」。

除了全括號以外,它需要產生的結果是「111555」。

請幫我介紹一下。謝謝。

+0

不會模式'\(| \)'做竅門嗎? – spender

+0

不,這個模式不起作用。當我使用這種模式時,結果是「111222333444555666778888」。這不是我想要的。 – Song

+0

你認爲'[^]]'在你的正則表達式中意味着什麼? –

回答

1

你可以使用string.Replace取代 「(」 和 「)」

string str = "111(222(333(444()))555(666(77(8888)))()".Replace("(","").Replace(")",""); 

如果您預期的結果111555你可以使用這個reqex

string str = "111(222(333(444())))555(666(77(8888)))()"; 
     var eliminateBracket = Regex.Replace(str, @"\([^)]*\)*\)", ""); 
+0

感謝您的回答。但是,您的示例將替換唯一的「(」和「)」。但是,我需要替換「()」中的數據。所以,這個樣本結果應該是「111555」。 – Song

+0

@宋,我認爲你只需要刪除「(」和「)」。更新爲你 –

+0

@MaxMokrousov你的表情不能與'111((1)222(333(444())))555(666(778888)))()' – Val

3

此字符串111(222(333(444()))555(666(77(8888)))() 555之前錯過了) ,或者在111, 之後包含額外的(,您可以通過以下代碼找到它:

string str = "111(222(333(444()))555(666(77(8888)))()"; 
    var eliminateBracket = ReplaceBrackets(str); 

    static string ReplaceBrackets(string input) { 
     string regex = @"\([^()]*\)"; 
     string result = input; 
     string previous = input; 

     while (previous.Length != 
      (result = Regex.Replace(result, regex, "")).Length 
      ) { 
      previous = result; 
     } 

     return result; 
    } 

所以最後的字符串是111(222555

將給定的字符串更正爲111(222(333(444())))555(666(77(8888)))(),它會顯示您的預期結果111555

+0

非常感謝。正如你所提到的,這個例子是錯誤的不管怎樣,你的示例代碼是完美的。再次感謝。 – Song

+0

@宋沒問題。你的問題是堅實的,但我認爲你必須讓其他人更清楚,不要誤解你真正需要的東西。 – Val

0

另一種方法刪除括號中的任何內容,沒有正則表達式。

public static string RemoveAnythingInBrackets(string input) 
{ 
    if(string.IsNullOrEmpty(input)) 
    { 
     return input; 
    } 

    StringBuilder result = new StringBuilder(); 
    Stack<char> bracket = new Stack<char>(); 
    foreach(char c in input) 
    { 
     if(c == '(') 
     { 
      bracket.Push(c); 
     } 
     else if(c == ')' && bracket.Peek() == '(') 
     { 
      bracket.Pop(); 
     } 
     else if(!bracket.Any()) 
     { 
      result.Append(c); 
     } 
    } 
    return result.ToString(); 
}