C#从字符串中删除括号

问题描述 投票:8回答:4

这似乎是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;
    }
c# regex parentheses
4个回答
8
投票

在您调用 Regex.Replace(...) 其实你是在用 string.Replace(...). 这使你的电话 .Replace(@"[^a-zA-Z]", "") 毫无用处。

将其简化为

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

这样就可以去掉所有的空格和特殊字符 这就是你的代码所要做的事情。这包括括号。


21
投票

在这里使用Regex是多余的,因为这可以通过一个简单的 Replace 呼叫。

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

3
投票

那是因为每一秒钟 Replace 是对一个 string 因此不能用regex来代替。


0
投票

或者,如果你想用一种花哨的LINQ方式来代替regex,你可以这样做。

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);
© www.soinside.com 2019 - 2024. All rights reserved.