今天在整理代码的时候,发现对输入的正则表达式有要求:至少提供一对括号。但是只是简单提示下,并没有添加规则的地方限制。为了避免不必要的麻烦,就自己实现了一个。
方法如下:
先去除:\( 和 \);再去除:[^()] ;再去除(),并计数
//返回值表示匹配到的括号数,负数代表括号不配对
private int GetBracketCount(string input)
{
input = Regex.Replace(input, @"\\\(|\\\)", "");
input = Regex.Replace(input, "[^()]", "");
int count = 0;
int index = input.IndexOf("()");
while (index >= 0)
{
count++;
input = input.Remove(index, 2);
index = input.IndexOf("()");
}
if (input.Length > 0)
{
count = count - 2 * count;
}
return count;
}
private int GetBracketCount(string input)
{
input = Regex.Replace(input, @"\\\(|\\\)", "");
input = Regex.Replace(input, "[^()]", "");
int count = 0;
int index = input.IndexOf("()");
while (index >= 0)
{
count++;
input = input.Remove(index, 2);
index = input.IndexOf("()");
}
if (input.Length > 0)
{
count = count - 2 * count;
}
return count;
}
附:找到的一个匹配括号是否配对的正则表达式:
^[^\(\)]*(((?<o>\()[^\(\)]*)+[^\(\)]*((?<-o>\))[^\(\)]*)+)*(?(o)(?!))$
在模仿中成长,在创新中成功