2010-09-16 14 views
12

¿Alguna idea?Intentando reemplazar todo el espacio en blanco con un solo espacio

Mi programa es una utilidad de validación de archivos y tengo que leer en un archivo de formato y luego analizar cada línea por un solo espacio. Pero obviamente, la persona que escribió el archivo de formato puede usar pestañas, o 2 espacios, o cualquier forma de espacio en blanco, y estoy buscando algún código para hacer eso. Intenté esto:

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

Supongo que esto es incorrecto.
Ayuda!

+0

Si va a hacer esto muchas veces es posible que desee almacenar el constructo el objeto Regex de antemano. Un readonly estático privado sería suficiente. Luego evita la creación del motor de expresiones regulares cada vez que va a reemplazar una línea. – Skurmedel

+0

@Skurmedel: O simplemente use el método integrado 'Regex.Replace' estático. – LukeH

+0

@LukeH: Creo que no entendiste mi punto. Hay una razón por la cual puede preconstruir los objetos regex, y no solo para una fácil reutilización. Consulte aquí http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.aspx "Métodos estático vs Instancia". Por supuesto, si él/ella no usa 15 expresiones regulares diferentes en su aplicación, probablemente no haya ningún problema. Pero no sé su solicitud. Es por eso que dije "podría". – Skurmedel

Respuesta

33

Usted puede hacer esto -

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

donde str es su cadena.

+0

Realmente quiero aceptar esto como mi respuesta, pero parece que no funciona. Simplemente sigue lanzando una excepción. Además, solo una pregunta general; con respecto a Regex, ¿'s' solo significa espacios en blanco? –

+0

@New Start - ¿Me puede decir cuál es el error? Espero que estés usando el espacio de nombres correcto ¿no? –

+0

@New Start - '\ s' coincide con el carácter de espacio en blanco. mira esto - http://www.regular-expressions.info/charclass.html#shorthand –

-1

Este es un duplicado de this question

sin embargo, la respuesta es la siguiente (crédito a Daok)

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

Esto no se ocupa de las pestañas. – Timwi

+0

Mi pensamiento exactamente. De hecho, leí esa pregunta, pero realmente no ayudó a mi situación particular. –

+1

Tomando un punto ... debería enseñarme a leer la pregunta más de cerca, leo "espacios múltiples" en lugar de "espacios en blanco" que incluyen pestañas, etc. Disculpas – 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, " "); 
Cuestiones relacionadas