c# - 如何仅在整个文本被括号包围时才删除括号?

标签 c# .net regex string

只有当整个文本都被括号包围时,我才想删除括号。例如:

(text (text) text)

需要转换为:

text (text) text

我有一个非常简单的检查:

value = (value [0] == '(' && value [value .Length - 1] == ')') ? value.Substring(1, value .Length - 2) : value;

但它失败了,并错误地删除了这些字符串的括号:

(text (text) ) text (text)

谁能说出一种处理所有情况的方法? OK 也可以使用正则表达式。

请注意,括号是平衡的。例如,这种情况是不可能的:

( text ( text )

最佳答案

使用一个简单的循环进行测试,如果它对删除“有效”,则删除第一个和最后一个:

bool isValid = value[0] == '(' && value[value.Length - 1] == ')';
int i = 1;
int c = 0;
for(; isValid && c >= 0 && i < value.Length - 1; i++)
{
  if(value[i] == '(')
    c++;
  else if(value[i] == ')')
    c--;
}

if(isValid && i == (value.Length - 1) && c == 0)
  value = value.Substring(1, value.Length - 2);

关于c# - 如何仅在整个文本被括号包围时才删除括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32231487/

相关文章:

c# - 当我们遇到异常时渲染错误 View

c# - Linq 中的空引用异常

.net - 通过 Internet 传输数据的最佳方法(针对 .NET 开发人员)

.net - 学习 MSBuild 有哪些好的初学者资源?

regex - 十进制数的正则表达式在Flutter TextFormField inputFormatters中不起作用

c# - ASP.NET MVC3、Razor - 在 Javascript 中使用 ViewBag 或 URL 变量

c# - CLR在哪里存储一种类型实例的方法

c# - 对象没有值(value)

javascript - 正则表达式 : how to replace a string (as a variable) that has a digit in it?

r - 列名称的 grep 模式