String.Replace的替代品

问题描述 投票:19回答:5

所以今天我写的代码基本上是这样的:

string returnString = s.Replace("!", " ")
            .Replace("@", " ")
            .Replace("#", " ")
            .Replace("$", " ")
            .Replace("%", " ")
            .Replace("^", " ")
            .Replace("*", " ")
            .Replace("_", " ")
            .Replace("+", " ")
            .Replace("=", " ")
            .Replace("\", " ")

这不是很好。我想知道是否有正则表达式或我可以写的东西会替换所有对Replace()函数的调用?

c# regex string replace
5个回答
33
投票

您可以使用Regex.Replace()。所有字符都可以放在方括号之间,方括号与方括号之间的任何字符匹配。一些特殊字符必须用反斜杠转义,我在这里使用@verbatim字符串,所以我不必为C#编译器双重转义它们。第一个参数是输入字符串,最后一个参数是替换字符串。

var returnString = Regex.Replace(s,@"[!@#\$%\^*_\+=\\]"," ");

2
投票

仅供参考 - 如果您需要修改此正则表达式,则需要了解正则表达式语言。它非常简单,作为开发人员,你真的应该为自己添加正则表达式到你的工具箱 - 你不需要每天都使用它们,但能够在需要的时候适当地应用它们会让你回来最初努力的十倍。这是一个链接到一个网站,其中包含一些顶尖的,易于学习的关于正则表达式的教程和参考资料:regular-expressions.info。一旦你对正则表达式有所了解并希望在你的软件中使用它们,你就会想要购买Regex Buddy。它是学习和使用正则表达式的廉价而非凡的工具。我很少购买开发工具,但这个值得每一分钱。它在这里:Regex Buddy


0
投票
s/[!@#$%^*_+=\]/ /

将是它的正则表达式...在c#中你应该可以使用

Regex.Replace(yourstring, "[!@#$%^*_+=\]", "" ); 

虽然我的C#生锈了..


0
投票

如果你不想深入研究正则表达式,这里有一些其他的扩展方法可能性。

您可以传入要替换的特定字符:

static public string ReplaceCharsWithSpace(this string original, string chars)
{
    var result = new StringBuilder();
    foreach (var ch in original)
    {
        result.Append(chars.Contains(ch) ? ' ' : ch);
    }
    return result.ToString();
}

或者如果你知道你只想保留或只删除特定类型的字符,你可以使用qazxsw poi中的各种方法,例如qazxsw poi,qazxsw poi,qazxsw poi和char

IsLetter

以下是您如何使用这些可能性:

IsDigit

0
投票

如果需要,也许你可以通过使用Lambda表达式和IsPunctuation将其减少到几行

IsSymbol
© www.soinside.com 2019 - 2024. All rights reserved.