2009-11-08 5 views
1

J'ai ce simple regex remplacer la routine à base, est de toute façon d'améliorer ses performances (et peut-être aussi son élégance?)Débutant RegEx Remplacer Performance Question

public static string stripshrapnel(string str) 
{ 
     string newstr = str.Trim(); 
     newstr = Regex.Replace(newstr, @"-", ""); 
     newstr = Regex.Replace(newstr, @"'", ""); 
     newstr = Regex.Replace(newstr, @",", ""); 
     newstr = Regex.Replace(newstr, @"""", ""); 
     newstr = Regex.Replace(newstr, @"\?", ""); 
     newstr = Regex.Replace(newstr, @"\#", ""); 
     newstr = Regex.Replace(newstr, @"\;", ""); 
     newstr = Regex.Replace(newstr, @"\:", ""); 
     //newstr = Regex.Replace(newstr, @"\(", ""); 
     //newstr = Regex.Replace(newstr, @"\)", ""); 
     newstr = Regex.Replace(newstr, @"\+", ""); 
     newstr = Regex.Replace(newstr, @"\%", ""); 
     newstr = Regex.Replace(newstr, @"\[", ""); 
     newstr = Regex.Replace(newstr, @"\]", ""); 
     newstr = Regex.Replace(newstr, @"\*", ""); 
     newstr = Regex.Replace(newstr, @"\/", ""); 
     newstr = Regex.Replace(newstr, @"\\", ""); 
     newstr = Regex.Replace(newstr, @"&", "&"); 
     newstr = Regex.Replace(newstr, @"&amp", "&"); 
     newstr = Regex.Replace(newstr, @" ", " "); 
     newstr = Regex.Replace(newstr, @"&nbsp", " "); 
     return newstr; 
} 

Merci, Matt

Répondre

9

Vous pouvez combiner la plupart des expressions jusqu'à ce que vous vous retrouvez avec seulement trois:

public static string stripshrapnel(string str) 
{ 
     string newstr = str.Trim(); 
     newstr = Regex.Replace(newstr, @"[-',""?#;:+%[\]*/\\\\]", ""); 
     newstr = Regex.Replace(newstr, @"&?", "&"); 
     newstr = Regex.Replace(newstr, @" ?", " "); 
     return newstr; 
} 
+0

Fantastique Gumbo !, merci, quelqu'un a-t-il des idées à quel point ce serait plus rapide (un pourcentage approximatif?)? – WickedW

+0

@WickedW: La performance actuelle est-elle inacceptable? Si oui, avez-vous profilé l'application pour déterminer s'il s'agit d'un goulot d'étranglement? Il est généralement préférable d'éviter une optimisation prématurée. (Bien que je verrais certainement dans le remplacement de votre code original avec Gumbo.) – TrueWill

+0

@WickedW: Je ne m'attends pas à être beaucoup plus rapide car il fait le même travail, mais seulement d'une manière différente. Mais pourquoi ne pas vous référencer vous-même? – Gumbo

3

Puisque vous utilisez zéro fonctionnalités regex peut-être il y a une autre façon. Il semble que C# a une méthode Replace pour les chaînes de caractères, utilisez-la plutôt, j'imagine qu'il y a beaucoup de puissance supplémentaire quand on fait de la regex au lieu d'un simple remplacement.

+0

+1 à utiliser remplacer sur regex si possible – bguiz

+1

String.Replace n'a pas de jeu de caractères et aurait besoin de code similaire à celui de la question. La solution de Gumbo est beaucoup plus rapide et plus lisible. –