Estoy peleándome con una expresión regular que quiero hacer, para reemplazar parte de una cadena, pero no hay manera ;)
Podría procesar los datos línea a línea por ejemplo, y entonces sería más sencillo, en cuanto a la ER; pero requeriría más código y al final, el código para lo que quiero hacer, sería más lioso...
Se trata de leer un archivo, y modificar algunas cosas: Por ejemplo: Eliminar una línea que sólo contenga espacios o tabulaciones; o eliminar los espacios o tabulaciones, delante de una línea que contenga texto (por texto, me refiero a cualquier cosa que no sean espacios en blanco o tabulaciones) o, eliminarlos al final de esta, si los hay.
Para esto, iría muy bien la función StringStripWS() de AutoIt, pero al leer todo el contenido de una vez, con FileRead(), no sirve esta función...
El problema es, que con la ER, consigo eliminar los espacios o tabulaciones, en los casos que menciono arriba, pero también se eliminan los saltos de línea que hay justo antes, o después (que es en lo que me baso mayormente para buscar espacios o tabulaciones).
Pero, no quiero que se eliminen los saltos de línea, sino sólo los espacios y/o tabulaciones, porque de lo contrario, se podrían juntar líneas del contenido del archivo...
He probado a hacer la ER de todas las formas que se me han ocurrido, que no han sido pocas. Pero siempre, el resultado es el mismo...
Por ejemplo, he hecho algo así:
Código: Seleccionar todo
(?:\A|[\r\n]{1})[[:space:]\h\t\v]|[[:space:]\h\t\v](?:[\r\n]{1}|\z)
Podría haber sustituido:
Por:(?:[\r\n]{1}|\z)
Pero entonces, no sé por qué: Pero todo lo que haya después de una secuencia de espacios y/o tabulaciones, se elimina (porque en el tercer parámetro de StringRegExpReplace() pongo una cadena vacía ("")).(?:\Z)
Entiendo que no debería ser así, porque según la ayuda de AutoIt "\Z" coincide con fin de cadena, o nueva línea... (entiendo, que lo primero que se encuentre). Y si hay una línea en la que únicamente hay por ejemplo espacios, debería coincidir sólo con "nueva línea", si no es la última del archivo que he leído.
También podría haber sustituido:
Por:[[:space:]\h\t\v]
Pero así, también elimino espacios verticales, si los hubiera ;)[[:blank:]]
De momento, se me ha ocurrido solucionar esto, añadiendo antes del reemplazo, saltos de línea, a los que ya haya en la cadena. Así, si se elimina uno, no se juntan las líneas... Pero eso es sólo una chapuza para avanzar. :)
Espero que alguien sepa explicarme como hacerlo...
Quizás, sea cosa de que no entiendo muy bien los grupos y los sets... Sé como funcionan, pero no me aclaro mucho con cuando usar uno y otro, más allá, de usar un set ([...]) cuando los carácteres pueden aparecer en cualquier orden, y un grupo, cuando han de aparecer en un orden concreto. Al menos, es lo que entiendo de la ayuda de la función StringRegExp().
Pero en cualquier caso, ni con grupos, ni sin ellos... Siempre se acaban eliminando los saltos de línea, de todas las formas que he probado :)
Salu2!