如何更换多个支架?

时间:2017-06-02 02:21:29

标签: c#

我在字符串中有多个括号。

所以,我想为所有多个括号替换为空。

例如,

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

在这种情况下,我的结果是“111))555))”。

除了全部括号之外,它需要的结果是“111555”。

请帮我解决这个问题。感谢。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您可以使用string.Replace替换“(”和“)”

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

如果您预期结果111555,则可以使用此请求

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

答案 2 :(得分: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();
}