es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Como traductor de español que traduce documentos de TI, puedo ayudarte con tu solicitud de intercambiar dos palabras específicas utilizando regex. Para realizar el intercambio, necesitaré más información sobre los dos términos que deseas cambiar y cómo deberían intercambiarse. Por favor, proporciona los términos y explícame la forma en que deben intercambiarse, y con gusto te brindaré la traducción correspondiente utilizando regex.

Tengo un texto como este:

niño niña bucle para salir niño niña izquierda derecha

Quiero intercambiar “niño” y “niña” usando regex (Atención: “niño” / “niña” aparecen en desorden). Así que escribo esto:

String str = "niño niña bucle para salir niño niña izquierda derecha";
String regex = "(\\bniña\\b)|(\\bniño\\b)";
System.out.println(str.replaceAll(regex, "$2$1"));

Pero no funciona. ¿Puedes decirme por qué y mostrarme la solución correcta?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La razón por la cual el código dado no funciona es porque intercambia toda la palabra incluyendo el límite de la palabra, lo que hace que el regex cambie todo el límite circundante. Por lo tanto, esto genera una salida incorrecta.

    Para resolver este problema, podemos utilizar las aserciones de visualización hacia adelante (?=) y visualización hacia atrás (?<=) para intercambiar únicamente la palabra en sí misma sin afectar al resto del texto. La solución correcta es la siguiente:

    String str = "boy girl loop for get out boy girl left right";
    String regex = "\\b(?=(boy|girl)\\b)(boy|girl)\\b";
    System.out.println(str.replaceAll(regex, "$2$1"));
    

    Aquí, hacemos coincidir tanto “boy” como “girl” utilizando (|) y la visualización hacia adelante positiva (?=). Luego, volvemos a hacer coincidir la misma palabra con \bboy|girl\b y capturamos ambas con paréntesis (). Finalmente, reemplazamos la cadena con los grupos capturados $2$1 en orden inverso.

    Este código produce la salida correcta:

    girl boy loop for get out girl boy left right
    

Comments are closed.