2010-09-16 6 views
12

Des idées?Essayer de remplacer tous les espaces blancs par un seul espace

Mon programme est un utilitaire de validation de fichier et je dois lire dans un fichier de format puis analyser chaque ligne par un seul espace. Mais évidemment, la personne qui a écrit le fichier de format peut utiliser des tabulations, ou 2 espaces, ou toute forme d'espace, et je cherche du code pour le faire. J'ai essayé ceci:

 public static string RemoveWhitespace(this string line) 
     { 
      try 
      { 
       return new Regex(@"\s*").Replace(line, " "); 
      } 
      catch (Exception) 
      { 
       return line; 
      } 
     } 

Je suppose que c'est faux.
Aide!

+0

Si vous allez faire ce beaucoup de fois que vous pouvez stocker la construction l'objet Regex au préalable. Un readonly statique privé ferait l'affaire. Ensuite, vous évitez la création du moteur regex chaque fois que vous allez remplacer une ligne. – Skurmedel

+0

@Skurmedel: Ou utilisez simplement la méthode statique 'Regex.Replace' intégrée. – LukeH

+0

@LukeH: Je pense que vous avez manqué mon point. Il y a une raison pour laquelle vous pouvez préconstruire les objets regex, et pas seulement pour une réutilisation facile. Voir ici http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.aspx "Méthodes statiques vs instances". Certes, s'il n'utilise pas 15 expressions rationnelles différentes dans sa demande, il n'y a probablement aucun problème. Mais je ne connais pas son application. C'est pourquoi j'ai dit "pourrait". – Skurmedel

Répondre

33

Vous pouvez le faire -

System.Text.RegularExpressions.Regex.Replace(str,@"\s+"," "); 

str est votre chaîne.

+0

Je veux vraiment accepter cela comme ma réponse, mais cela ne semble pas fonctionner. Il continue juste de lancer une exception. Aussi, juste une question générale; en ce qui concerne Regex, '\ s' signifie-t-il juste un espace? –

+0

@New Start - Pouvez-vous me dire quelle est l'erreur? J'espère que vous utilisez correctement l'espace de noms? –

+0

@New Start - '\ s' correspond au caractère d'espace blanc. vérifier ceci - http://www.regular-expressions.info/charclass.html#shorthand –

-1

C'est un double de this question

mais la réponse est (crédit Daok)

Regex regex = new Regex(@"[ ]{2,}");  
tempo = regex.Replace(tempo, @" "); 
+1

Cela ne prend pas en charge les onglets. – Timwi

+0

Ma pensée exactement. J'ai effectivement lu cette question mais cela n'a vraiment pas aidé ma situation particulière! –

+1

Point pris ... devrait m'apprendre à lire la question de plus près, j'ai lu "espaces multiples" au lieu de "espaces" qui comprennent des onglets etc! Excuses – Xander

0
input = input.Replace("\t", " "); 

List<string> empties = new List<string>(); 
for (int i=input.Length - 1; i>1; i--) 
{ 
    string spcs = ""; 
    for (int j=0; j<=i; j++) 
     spcs += " "; 
    if (input.Contains(spcs)) 
     empties.Add(spcs); 
} 

foreach (string s in empties) 
    input = input.Replace(s, " ");