web-dev-qa-db-fra.com

Regex pour supprimer uniquement des caractères spéciaux spécifiques de la chaîne

Je voudrais écrire une expression régulière qui supprimerait les caractères spéciaux sur la base suivante:

  • Pour supprimer le caractère d'espace blanc
  • @, &, ', (, ), <, > ou #

J'ai écrit cette expression régulière qui supprime les espaces blancs avec succès:

 string username = Regex.Replace(_username, @"\s+", "");

Mais je voudrais le mettre à niveau/le changer pour qu'il puisse supprimer les caractères ci-dessus que j'ai mentionnés.

Est-ce que quelqu'un peut m'aider avec ça?

6
User987
 string username = Regex.Replace(_username, @"(\s+|@|&|'|\(|\)|<|>|#)", "");
20
Mithilesh Gupta

utiliser un jeu de caractères [charsgohere]

string removableChars = Regex.Escape(@"@&'()<>#");
string pattern = "[" + removableChars + "]";

string username = Regex.Replace(username, pattern, "");
8
Mathias R. Jessen

Je suggère d'utiliser Linq au lieu de expressions régulières:

 string source = ...

 string result = string.Concat(source
   .Where(c => !char.IsWhiteSpace(c) && 
                c != '(' && c != ')' ...));

Si vous avez plusieurs caractères à ignorer, vous pouvez les organiser en une collection:

 HashSet<char> skip = new HashSet<char>() {
   '(', ')', ... 
 };

 ... 

 string result = string.Concat(source
   .Where(c => !char.IsWhiteSpace(c) && !skip.Contains(c)));
4
Dmitry Bychenko

Vous pouvez facilement utiliser la fonction Remplacer du Regex:

string a = "ash&#<>fg  fd";
a= Regex.Replace(a, "[@&'(\\s)<>#]","");
4