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

参考までに、この正規表現を変更する必要がある場合は、正規表現言語を理解している必要があります。それは非常に簡単です。開発者として、ツールボックスに正規表現を追加することは本当に自分自身の責任です。毎日必要というわけではありませんが、必要になったときに必要な場所に適切に適用できれば、元が取れます。最初の努力の 10 倍。これは、一流の、わかりやすいチュートリアルと正規表現に関する参考資料がある Web サイトへのリンクです: regular-expressions.info。正規表現に慣れて、自分のソフトウェアで使いたいと思ったら、Regex Buddy を購入したくなるでしょう。これは、正規表現を学習および使用するための安価で並外れたツールです。私はとても開発ツールを購入することはめったにありませんが、これはすべての価値がありました。ここにあります:Regex Buddy

于 2008-09-23T00:21:48.310 に答える
0

必要に応じて、ラムダ式と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 に答える
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 に答える