18

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

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

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

4

5 回答 5

32

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

var returnString = Regex.Replace(s,@"[!@#\$%\^*_\+=\\]"," ");
于 2008-09-22T23:55:23.693 回答
2

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

于 2008-09-23T00:21:48.310 回答
0
s/[!@#$%^*_+=\]/ /

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

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

虽然我的 C# 生锈了..

于 2008-09-22T23:57:18.383 回答
0

如果您不想深入研究 Regex,这里有一些其他扩展方法的可能性。

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

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();
}

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

static public string ReplaceNonLetterCharsWithSpace(this string original)
{
    var result = new StringBuilder();
    foreach (var ch in original)
    {
        result.Append(char.IsLetter(ch) ? ch : ' ');
    }
    return result.ToString();
}

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

string s = "ab!2c";
s = s.ReplaceCharsWithSpace(@"!@#$%^*_+=/");  // s contains "ab  c"

string t = "ab3*c";
t = t.ReplaceNonLetterCharsWithSpace();  // t contains "ab  c"
于 2008-09-23T01:38:52.103 回答
0

如果需要,您可以通过使用 Lambda 表达式和List<>, ForEach

using System.Collections.Generic;

namespace ReplaceWithSpace 
 {
    class Program 
    {
        static void Main(string[] args) 
        {
            string someString = "#1, 1+1=2 $string$!";

            var charsToRemove = new List<char>(@"!@#$%^*_+=\");
            charsToRemove.ForEach(c => someString = someString.Replace(c, ' '));

            System.Diagnostics.Debug.Print(someString); //" 1, 1 1 2  string  "
        }
    }

}
于 2008-10-17T02:37:30.363 回答