solo regulares regular probar numeros letras expresiones expresion especiales espacios espacio ejemplos consecutivos caracteres blanco alfanumerico c# regex nlp

c# - regulares - Separar cadena en oraciones usando expresión regular



expresiones regulares java (6)

Necesito unir una cuerda como "uno, dos, tres, cuatro, cinco, seis, siete, ocho, nueve, diez, once" en grupos de cuatro oraciones. Necesito una expresión regular para dividir la cadena en un grupo después de cada cuarto período. Algo como:

string regex = @"(.*./s){4}"; System.Text.RegularExpressions.Regex exp = new System.Text.RegularExpressions.Regex(regex); string result = exp.Replace(toTest, "./n");

no funciona porque reemplazará el texto antes de los puntos, no solo los períodos. ¿Cómo puedo contar solo los períodos y reemplazarlos por un punto y un nuevo carácter de línea?


¿Estás obligado a hacer esto a través de Regex? ¿No sería más fácil simplemente dividir la cadena y luego procesar la matriz?


En este caso, parece que la expresión regular es un poco exagerada. Yo recomendaría usar String.split y luego dividir la matriz de cadenas resultante. Debería ser mucho más simple y mucho más confiable que tratar de hacer que una expresión regular haga lo que intentas hacer.

Algo como esto podría ser un poco más fácil de leer y depurar.

String s = "one. two. three. four. five. six. seven. eight. nine. ten. eleven" String[] splitString = s.split(".") List li = new ArrayList(splitString.length/2) for(int i=0;i<splitString.length;i+=4) { st = splitString[i]+"." st += splitString[i+1]+"." st += splitString[i+2]+"." st += splitString[i+3]+"." li.add(st) }


Expresión de búsqueda: @"(?:([^/.]+?)./s)(?:([^/.]+?)./s)(?:([^/.]+?)./s)(?:([^/.]+?)./s)" Reemplazar expresión: "$1 $2 $3 $4./n"

Ejecuté esta expresión en RegexBuddy con .NET regex seleccionada, y el resultado es:

one two three four. five six seven eight. nine. ten. eleven

Intenté con un tipo de arreglo @"(?:([^.]+?)./s){4}" , pero la captura solo capturará la última ocurrencia (es decir, palabra), así que cuando se trata de reemplazarlo, perderá tres palabras de 4. Por favor, alguien me corrija si estoy equivocado.


No estoy seguro de si la respuesta del configurador se dañó por el editor o qué, pero no funciona. El patrón correcto es

string regex = @"([^.]*[.]){4}/s*";


Intenta definir el método

private string AppendNewLineToMatch(Match match) { return match.Value + Environment.NewLine; }

y usando

string result = exp.Replace(toTest, AppendNewLineToMatch);

Esto debería llamar al método para cada coincidencia y reemplazarlo con el resultado de ese método. El resultado del método sería el texto coincidente y una nueva línea.

EDITAR: También, estoy de acuerdo con Oliver. La definición correcta de expresiones regulares debería ser:

string regex = @"([^.]*[.]/s*){4}";

Otra edición: corrigió la expresión regular, con suerte lo hice bien esta vez.


. en una expresión regular significa "cualquier personaje"

entonces en tu expresión regular, has usado .*. que coincidirá con una palabra (esto es equivalente a .+ )

Probablemente buscaba [^.]/*[.] - una serie de caracteres que no son " . " S seguidos de un " . ".