web-dev-qa-db-fra.com

Supprimer tous les espaces de la chaîne C # avec regex

Je construis une chaîne de noms de famille séparés par des traits d'union. Parfois, un espace blanc est pris au piège. Je dois supprimer tous les espaces du résultat final.

Exemple de chaîne sur laquelle travailler:

Anderson-Reed-Smith

Cela doit finir comme (pas d'espace après Anderson):

Anderson-Reed-Smith

La chaîne de nom de famille se trouve dans une variable de chaîne, Nom.

J'utilise une expression régulière:

Regex.Replace(LastName, @"[\s+]", "");

Le résultat de ceci est:

Anderson-Reed-Smith.

J'ai aussi essayé:

Regex.Replace(LastName, @"\s+", "");

et

Regex.Replace(LastName, @"\s", "");

Qu'est-ce que je fais mal?

36
BattlFrog

Au lieu d'une RegEx, utilisez Replace pour quelque chose d'aussi simple:

LastName = LastName.Replace(" ", String.Empty);
120
Gabe

Regex.Replace ne modifie pas son premier argument (rappelez-vous que les chaînes sont immuables dans .NET) afin que l'appel

Regex.Replace(LastName, @"\s+", "");

laisse la chaîne LastName inchangée. Vous devez l'appeler comme ceci:

LastName = Regex.Replace(LastName, @"\s+", "");

Vos trois expressions régulières auraient fonctionné. Cependant, la première expression rationnelle supprime également tous les caractères plus, ce qui, j'imagine, serait involontaire.

49
dasblinkenlight

Pas besoin de regex. Cela supprimera également les onglets, les nouvelles lignes, etc.

var newstr = String.Join("",str.Where(c=>!char.IsWhiteSpace(c)));

Caractères WhiteSpace: 0009 , 000a , 000b , 000c , 000d , 0020 , 0085 , 00a0 , 1680 , 180e , 2000 , 2001 , 2002 , 2003 , 2004 , 2005 , 2006 , 2007 , 2008 , 2009 , 200a , 2028 , 2029 , 202f , 205f , 3000.

12
I4V

Le moyen le plus rapide et le plus général de le faire (les fins de ligne, les onglets seront également traités). Les installations puissantes de Regex ne sont pas vraiment nécessaires pour résoudre ce problème, mais Regex peut réduire les performances.

                       new string
                           (stringToRemoveWhiteSpaces
                                .Where
                                (
                                    c => !char.IsWhiteSpace(c)
                                )
                                .ToArray<char>()
                           )

OR

                       new string
                           (stringToReplaceWhiteSpacesWithSpace
                                .Select
                                (
                                    c => char.IsWhiteSpace(c) ? ' ' : c
                                )
                                .ToArray<char>()
                           )
1
CSharpCoder