2011-11-20 12 views
5

Estoy usando Regex.Split() para tomar la entrada del usuario y convertirla en palabras individuales en una lista, pero en el momento en que elimina cualquier espacio que agreguen, me gustaría mantener el espacio en blanco.Regex.Split() oraciones a palabras conservando espacios en blanco

string[] newInput = Regex.Split(updatedLine, @"\s+"); 
+4

¿Cómo/dónde quieres mantener el espacio en blanco? Por ejemplo, ¿en qué se supone que se divide la cadena '" barra de foo ''? – BoltClock

Respuesta

6
string text = "This   is some text"; 
var splits = Regex.Split(text, @"(?=(?<=[^\s])\s+)"); 

foreach (string item in splits) 
    Console.Write(item); 
Console.WriteLine(splits.Count()); 

Esto le dará 4 divisiones que tienen cada uno todos los espacios iniciales Preservado.

(?=\s+) 

Significa división desde el punto donde hay espacios por delante. Pero si usa esto solo, creará 15 divisiones en el texto de muestra porque a cada espacio le sigue otro espacio en caso de espacios repetidos.

(?=(?<=[^\s])\s+) 

Esto significa partir de un punto que no tiene carácter de espacio antes y tiene espacios por delante.

Si el texto comienza a partir de un espacio y desea que para ser capturados en primera división sin texto a continuación, puede modificar la expresión de seguir

(?=(?<=^|[^\s])\s+) 

Lo que significa serie de espacios necesitan tener un no espacio carácter antes de él O inicio de la cadena.

+0

Eso es perfecto muchas gracias – Joel

+0

Goooooooooooooooooooooooooooood! +1 –

0

Supongo que algunas de las "palabras" que le interesan son en realidad frases donde los espacios son aceptables. No puede usar fácilmente el carácter espacio como un delimitador de frase y un carácter permitido dentro de la frase misma. Trate de usar una coma por un delimitador en su lugar:

string updatedLine = "user,input,two words,even three words"; 
string[] newInput = Regex.Split(updatedLine, @","); 

Esta versión de la expresión regular permite inclinar espacios después de las comas:

string updatedLine = "user, input, two words, even three words"; 
string[] newInput = Regex.Split(updatedLine, @",\s+|,"); 
Cuestiones relacionadas