PDA

Ver la Versión Completa : Ejercicios de verano (quitar espacios en blanco menos de " y ")


WillyWeb
16/07/18, 08:33:20
La amiga Viki tiene otra pregunta del millón...

Tengo una serie de frases de este tipo ...

Hola y muy buenas noches y tardes tengan ustedes.

... y quiero eliminar todos los espacios en blanco excepto los que rodean a la conjunción "y". Es decir, quiero que la frase quede así ...

Hola y muybuenasnoches y tardestenganustedes.

¿Podría alguien ayudarme con esto?

Así, a bote pronto, creo que tirando de regex se puede hacer con tres acciones. Pero seguro que un experto en expresiones regulares lo hace con menos. :silbando:

GraphicAdventure
21/07/18, 13:50:12
¿Tres acciones o tres expresiones?
Con una expresión vale pero para establecer la frase y el flash, hacen 3 acciones.

WillyWeb
21/07/18, 13:53:06
Con una expresión vale pero para establecer la frase y el flash, hacen 3 acciones.

Pues adelante ;-)

GraphicAdventure
21/07/18, 14:17:16
Tarea: Quitar Espacios
A1: Establecer variable [ Nombre:%frase A:Hola y muy yuenas nochesy y tardes tengan y yustedes. Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A2: Buscar y Reemplazar Contenido de Variable [ Variable:%frase Buscar:(?<! y) (?!y ) Ignorar Caso:Apagado Multilínea:Apagado Una sola coincidencia:Apagado Almacenar Coincidencias En: Reemplazar Coincidencias:Encendido Reemplazar Con: ]
A3: Flash [ Texto:%frase Largo:Apagado ]

Las palabras mal escritas son intencionadas para ver si funciona en varios casos. Espero que no se me haya escapado algún otro.

Para escribir expresiones regex solo tenemos de pensar qué buscar:
Quiero buscar un espacio que no esté seguido de 'y' junto a un 'espacio', y un espacio que no le anteceda un 'espacio' seguido de una 'y'.

Si tomamos "Hola y muy" vemos que se dan precisamente estas dos situaciones y no encontrará nada.

?< significa lookbehind (mirar detrás)
! significa negación (lo contrario)
?= significa lookahead (mirar delante)

Los look behind/ahead se llaman lookaround (mirar alrededor) y no consumen caracteres.
Significa que lo que encuentren no será incluido en el resultado.

En el medio de la expresión hay un espacio que es lo que estoy buscando.
Estoy negando lo que busco antes y después.
El símbolo de lookbehind se mantiene y se añade la negación pero en el lookahead se cambia el = por la negación.

WillyWeb
21/07/18, 14:35:53
Excelente. Funciona perfectamente. :aplaudit:

Aunque no estaría mal poner la descripción de la tarea y explicar el funcionamiento de esa expresión regular. Ten en cuenta que estas cosas quedan aquí para futuras consultas de usuarios que puede que no sean expertos en Tasker o regex. :silbando:

GraphicAdventure
21/07/18, 15:57:52
Hecho.