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?
Au lieu d'une RegEx
, utilisez Replace
pour quelque chose d'aussi simple:
LastName = LastName.Replace(" ", String.Empty);
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.
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
.
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>()
)