Question

Donc, j’écrivais aujourd’hui du code qui ressemble à ceci:

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

Ce qui n'est pas vraiment sympa. Je me demandais s'il y avait une expression rationnelle ou quelque chose que je pourrais écrire qui remplacerait tous les appels à la Replace() fonction?

Était-ce utile?

La solution

Vous pouvez utiliser Regex.Replace () . Tous les caractères peuvent être placés entre crochets, ce qui correspond à n’importe quel caractère entre les crochets. Certains caractères spéciaux doivent être échappés avec des barres obliques inverses, et j'utilise une chaîne @verbatim ici. Je n'ai donc pas à les échapper deux fois pour le compilateur C #. Le premier paramètre est la chaîne d'entrée et le dernier paramètre est la chaîne de remplacement.

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

Autres conseils

FYI - si vous avez besoin de modifier cette expression rationnelle, vous devez comprendre le langage des expressions rationnelles. C'est assez simple, et en tant que développeur, vous vous devez d'ajouter des expressions régulières à votre boîte à outils. Vous n'en avez pas besoin tous les jours, mais vous pourrez les appliquer correctement, le cas échéant, en cas de besoin. décuplé pour l'effort initial. Voici un lien vers un site Web proposant des didacticiels faciles à suivre et des références sur les expressions régulières: regular- expressions.info . Une fois que vous aurez compris les expressions régulières et que vous souhaiterez les utiliser dans votre logiciel, vous voudrez acheter Regex Buddy. C'est un outil peu coûteux et extraordinaire pour apprendre et utiliser des expressions régulières. J'achète très très rarement des outils de développement, mais celui-ci en valait la peine. C’est ici: Buddy Regex

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

Serait la regex pour cela ... en c #, vous devriez pouvoir utiliser

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

Bien que mon C # soit rouillé ..

Si vous ne souhaitez pas vous plonger dans Regex, voici quelques autres possibilités de méthodes d'extension.

Vous pouvez transmettre les caractères spécifiques que vous souhaitez remplacer:

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

Si vous savez que vous voulez conserver ou supprimer uniquement des types de caractères spécifiques, vous pouvez utiliser les différentes méthodes de char, telles que IsLetter, IsDigit, IsPunctuation et IsSymbol. :

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

Voici comment vous utiliseriez chacune de ces possibilités:

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

string t = "ab3*c";
t = t.ReplaceNonLetterCharsWithSpace();  // t contains "ab  c"

Peut-être pouvez-vous réduire ce nombre à quelques lignes, si vous le souhaitez, en utilisant une expression Lambda et 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  "
        }
    }

}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top