una separacion salto reglon que power palabras palabra otra mantener líneas linea las juntas impedir guiones evitar entre dividir dividan divida continuar concatenar con como codigo cambiar c# .net

c# - separacion - impedir que se dividan las palabras entre líneas power point



¿Cómo dividir el texto en palabras? (6)

Dividir texto en espacios en blanco, luego recortar puntuación.

var text = "''Oh, you can''t help that,'' said the Cat: ''we''re all mad here. I''m mad. You''re mad.''"; var punctuation = text.Where(Char.IsPunctuation).Distinct().ToArray(); var words = text.Split().Select(x => x.Trim(punctuation));

Está de acuerdo exactamente con el ejemplo.

¿Cómo dividir el texto en palabras?

Texto de ejemplo:

''Oh, no puedes evitarlo'', dijo el Gato: ''todos estamos locos aquí. Estoy loco. Estas loco.''

Las palabras en esa línea son:

  1. Oh
  2. hipocresía
  3. ayuda
  4. ese
  5. dijo
  6. la
  7. Gato
  8. fueron
  9. todos
  10. enojado
  11. aquí
  12. soy
  13. enojado
  14. Tu eres
  15. enojado

Este es uno de solución, no uso ninguna clase de ayuda o método.

public static List<string> ExtractChars(string inputString) { var result = new List<string>(); int startIndex = -1; for (int i = 0; i < inputString.Length; i++) { var character = inputString[i]; if ((character >= ''a'' && character <= ''z'') || (character >= ''A'' && character <= ''Z'')) { if (startIndex == -1) { startIndex = i; } if (i == inputString.Length - 1) { result.Add(GetString(inputString, startIndex, i)); } continue; } if (startIndex != -1) { result.Add(GetString(inputString, startIndex, i - 1)); startIndex = -1; } } return result; } public static string GetString(string inputString, int startIndex, int endIndex) { string result = ""; for (int i = startIndex; i <= endIndex; i++) { result += inputString[i]; } return result; }


Primero, remueve todos los caracteres especiales:

var fixedInput = Regex.Replace(input, "[^a-zA-Z0-9% ._]", string.Empty); // This regex doesn''t support apostrophe so the extension method is better

Luego dividirlo:

var splitted = fixedInput.Split('' '');

Para una solución de C # más simple para eliminar caracteres especiales (que puede cambiar fácilmente), agregue este método de extensión (agregué un soporte para un apóstrofe):

public static string RemoveSpecialCharacters(this string str) { StringBuilder sb = new StringBuilder(); foreach (char c in str) { if ((c >= ''0'' && c <= ''9'') || (c >= ''A'' && c <= ''Z'') || (c >= ''a'' && c <= ''z'') || c == ''/''') { sb.Append(c); } } return sb.ToString(); }

Entonces utilízalo así:

var words = input.RemoveSpecialCharacters().Split('' '');

Se sorprenderá al saber que este método de extensión es muy eficiente (seguramente mucho más eficiente que el Regex), así que le sugeriré que lo use;)

Actualizar

Estoy de acuerdo en que este es un enfoque solo en inglés, pero para hacerlo compatible con Unicode, todo lo que tiene que hacer es reemplazar:

(c >= ''A'' && c <= ''Z'') || (c >= ''a'' && c <= ''z'')

Con:

char.IsLetter(c)

Que admite Unicode, .Net también le ofrece char.IsSymbol y char.IsLetterOrDigit para la variedad de casos


Puede intentar usar una expresión regular para eliminar los apóstrofes que no están rodeados por letras (es decir, comillas simples) y luego usar los métodos estáticos Char para eliminar todos los demás caracteres. Al llamar primero a la expresión regular, puede mantener los apóstrofes de contracción (por ejemplo can''t ) pero eliminar las comillas simples como en ''Oh .

string myText = "''Oh, you can''t help that,'' said the Cat: ''we''re all mad here. I''m mad. You''re mad.''"; Regex reg = new Regex("/b[/"'']/b"); myText = reg.Replace(myText, ""); string[] listOfWords = RemoveCharacters(myText); public string[] RemoveCharacters(string input) { StringBuilder sb = new StringBuilder(); foreach (char c in input) { if (Char.IsLetter(c) || Char.IsWhiteSpace(c) || c == ''/''') sb.Append(c); } return sb.ToString().Split('' ''); }


Si no desea utilizar un objeto Regex, podría hacer algo como ...

string mystring="Oh, you can''t help that,'' said the Cat: ''we''re all mad here. I''m mad. You''re mad."; List<string> words=mystring.Replace(",","").Replace(":","").Replace(".","").Split(" ").ToList();

Aún tendrás que manejar el apóstrofe al final de "eso".


Solo para agregar una variación en la respuesta de @Adam Fridental que es muy buena, puedes probar este Regex:

var text = "''Oh, you can''t help that,'' said the Cat: ''we''re all mad here. I''m mad. You''re mad.''"; var matches = Regex.Matches(text, @"/w+[^/s]*/w+|/w"); foreach (Match match in matches) { var word = match.Value; }

Creo que este es el RegEx más corto que tendrá todas las palabras

/w+[^/s]*/w+|/w