C#从字符串中删除括号

时间:2014-02-14 18:56:36

标签: c# regex parentheses

对于C#用户来说这似乎是一个常见的问题,经过研究和多次尝试后,我无法从字符串中删除一对括号。我遇到问题的字符串是Service (additional)

在完成我的研究之后,我理解在Regex.Replace中对括号的处理方式不同。我的研究也得到了我尝试的多个答案,但似乎没有任何效果。以下是我尝试删除这些括号的一些方法。

cleanValue = Regex.Replace(intVal, " ", "").Replace("(", "").Replace(")", "").Replace(",", "").Replace("/", "").Replace("-", "");

cleanValue = Regex.Replace(intVal, " ", "").Replace(@"\(", "").Replace(@"\)", "").Replace(",", "").Replace("/", "").Replace("-", "");

cleanValue = Regex.Replace(intVal, " ", "").Replace("[()]", "").Replace(",", "").Replace("/", "").Replace("-", "");

cleanValue = Regex.Replace(intVal, " ", "").Replace(@"[^a-zA-Z]", "").Replace(",", "").Replace("/", "").Replace("-", "");

这些都没有奏效,在单步执行代码后,我只看到'e'和'之间的空格('删除了。我错过了什么吗?

如果有人想看到这里使用的function,那就是:

    public static string CleanExtra(string intVal)
    {
        string cleanValue;
        if (intVal == null)
        {
            throw new System.ArgumentException("Value cannot be null", "original");
        }
        else
        {
            //cleanValue = Regex.Replace(intVal, " ", "").Replace("(", "").Replace(")", "").Replace(",", "").Replace("/", "").Replace("-", "");
            //cleanValue = Regex.Replace(intVal, " ", "").Replace(@"\(", "").Replace(@"\)", "").Replace(",", "").Replace("/", "").Replace("-", "");
            //cleanValue = Regex.Replace(intVal, " ", "").Replace("[()]", "").Replace(",", "").Replace("/", "").Replace("-", "");
            cleanValue = Regex.Replace(intVal, " ", "").Replace(@"[^a-zA-Z]", "").Replace(",", "").Replace("/", "").Replace("-", "");
        }

        return cleanValue;
    }

4 个答案:

答案 0 :(得分:18)

正则表达式在此处过度,因为这可以通过简单的Replace调用来完成:

string val = intVal.Replace("(", "").Replace(")", "");

答案 1 :(得分:7)

致电Regex.Replace(...)后,您实际上正在使用string.Replace(...)。这使您对.Replace(@"[^a-zA-Z]", "")的调用毫无用处。

将其简化为:

cleanValue = Regex.Replace(intVal, @"[^a-zA-Z]", "");

这应该删除所有空格和特殊字符,这是您的代码尝试执行的操作。这包括括号。

答案 2 :(得分:3)

这是因为每一秒Replace都是对string的调用,因此不会替换为正则表达式。

答案 3 :(得分:0)

或者,如果您想使用一种奇妙的LINQ方式来代替正则表达式,请执行以下操作:

return new string(input.Where(c => c != '(' && c != ')').ToArray());

这将删除所有括号或括号:

var chars = input
    .Where(c => CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.OpenPunctuation
                && CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.ClosePunctuation)
    .ToArray();
return new string(chars);