我在字符串中有多个括号。
所以,我想为所有多个括号替换为空。
例如,
string str = "111(222(333(444())))555(666(77(8888)))()";
var eliminateBracket = Regex.Replace(str, @"\([^)]*\)", "");
在这种情况下,我的结果是“111))555))”。
除了全部括号之外,它需要的结果是“111555”。
请帮我解决这个问题。感谢。
答案 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();
}