2012-04-09 26 views
10

Duplicar posible:
How do I replace multiple spaces with a single space in C#?cómo recortar "a b c" en "abc"

¿Cuál es la forma más elegante forma de arreglar los espacios en blanco en cadenas como " a<many spaces>b c " en "a b c". Entonces, el espacio en blanco repetido se reduce en un espacio.

+0

@naveen, la pregunta que enlaza no maneja el espacio alrededor de la cadena. – Lucero

+4

@Lucero: siempre hay '.Trim()' para eso. :) – naveen

+1

@naveen, el punto es que es diferente. Si uno sabe cómo usar una expresión regular y recortar, entonces la pregunta ni siquiera sería necesaria. – Lucero

Respuesta

12

usted podría utilizar Regex para esto:

Regex.Replace(my_string, @"\s+", " ").Trim(); 
+0

-1: No eliminará el espacio alrededor de la cadena. – leppie

+2

Bien, entonces ¿por qué darías -1? La respuesta está bien ... se puede arreglar fácilmente ... no hay ningún punto –

+1

@TomaCristian: Porque ha habido varias otras respuestas correctas. Tonto como todo el mundo va y edita el suyo ... Pretty cojo IMO. Simplemente elimínelo si lo entendió mal la primera vez. – leppie

14

Una solución w/o expresiones regulares, sólo para tener encima de la mesa:

char[] delimiters = new char[] { ' '}; // or null for 'all whitespace' 
string[] parts = txt.Split(delimiters, StringSplitOptions.RemoveEmptyEntries); 
string result = String.Join(" ", parts); 
+1

A diferencia de las soluciones de expresiones regulares que usan '\ s', esto solo eliminará los caracteres de espacio (U + 0020), no otros caracteres clasificados como espacios en blanco. Esto cumple con el criterio de la Q, pero en la práctica esperaría que tal necesidad también se aplique a las pestañas, etc. – Richard

+1

@Richard: el OP puede ajustar eso con los delimitadores var. Y el uso de 'delimiters = null' corresponde a' \ s' –

+1

Siempre me pregunto (como en esta pregunta aquí) por qué las operaciones de cadenas complejas y relativamente costosas son preferidas por muchas expresiones regulares más que concisas. Mi lema es usar las herramientas adecuadas para el trabajo que se realizará, y regex fue la herramienta diseñada exactamente para la coincidencia de patrones "simples" de expresiones regulares de texto.(Henk, no me malinterpretes, no estoy criticando tu respuesta para nada, pero no entiendo la adversión de muchos para aprender expresiones regulares y usarlos en "casa", ten en cuenta que yo ' d no crea un analizador de números o un analizador de números completo con expresiones regulares, tienen sus límites claros). – Lucero

0
Regex.Replace(str, "[\s]+"," ") 

luego llamar a Recortar para deshacerse de espacio blanco inicial y final.

8
Regex.Replace(my_string, @"^\s+|\s+$|(\s)\s+", "$1"); 
+4

+1 Me gusta. Pero me pregunto cuántos de mis programadores junior lo entenderán. :) – naveen

+1

Conocer algunos conceptos básicos de expresiones regulares es una habilidad importante en mi humilde opinión, especialmente porque también está en el conjunto de herramientas del desarrollador web del lado del cliente (donde muchos juniors estarán haciendo cosas). Entonces, si ellos no lo entienden, solo tienen que buscarlo ... no es demasiado complejo para ser disecado por un novato de expresiones regulares en mi humilde opinión. – Lucero

+0

Claro, se puede deducir, pero toma un tiempo para analizar mentalmente, incluso con conocimiento de expresiones regulares. La expresión regular en la versión con '.Trim()' es mucho más conciso, es más fácil de mantener. (No estoy bajando la votación, sin embargo, esta versión _may_ se prefiere en algunas situaciones, como un ciclo cerrado, si realmente es más rápido) – Izkata

0

el uso de expresiones regulares

String test = " a b c "; 
test = Regex.Replace(test,@"\s{2,}"," "); 
test = test.Trim(); 

este código sustituye a 2 o más espacios con un espacio usando Regex luego retire en el principio y el final.

+0

Su expresión regular solo reemplaza exactamente dos espacios en blanco con uno. Debería ser '\ s {2,}' o '\ s \ s +' o incluso '\ s +' si desea reemplazar cualquier número de espacios en blanco por un espacio (tenga en cuenta que '\ s' coincide con todos los espacios en blanco, incluidos los caracteres como pestañas, el resultado será diferente). – Lucero

+0

@Lucero tienes razón, pero funcionará porque seleccionará cada 2 espacios como un grupo, así que si tenemos 4 espacios en blanco significa que tenemos que reemplazar los grupos –

+0

El arreglo está funcionando, pero antes 2 grupos habrían sido reemplazado a dos espacios en la salida (la salida no se vuelve a procesar como entrada). – Lucero

4

Utilice el método Trim para eliminar los espacios en blanco del principio y final de la cadena, y una expresión regular para reducir los múltiples espacios:

s = Regex.Replace(s.Trim(), @"\s{2,}", " "); 
0

utilizar una expresión regular:

"(){2,}" //Matches any sequence of spaces, with at least 2 of them 

y usa eso para reemplazar todas las coincidencias con "".

No lo he hecho en C# y necesito más tiempo para descubrir lo que dice la documentación, así que tendrá que encontrarlo solo ... lo siento.

0
 Regex rgx = new Regex("\\s+"); 
     string str; 
     str=Console.ReadLine(); 
     str=rgx.Replace(str," "); 
     str = str.Trim(); 
     Console.WriteLine(str); 
Cuestiones relacionadas