Expresiones Regulares: remover caracteres de retorno de línea indeseados

Expresiones regulares

En esta entrada voy a explicar cómo las conocidas y poderosas expresiones regulares pueden ayudarnos a resolver escenarios problemáticos que se pueden presentar al manipular cadenas o archivos de texto.

Las expresiones regulares fueron creadas en la década de los 50 y fueron incluídas en Unix desde 1970, han estado allí desde hace mucho tiempo y son una herramienta poderosa con la que podemos contar para resolver problemas de manipulación de texto.

Las expresiones regulares pueden ser muy simples o muy muy complejas, existen utilidades o páginas que nos permiten crear expresiones regulares complejas de forma sencilla. Una que uso de forma regular es: regex101.com

regexp

En la sección quick reference podremos encontrar expresiones regulares básicas y que nos ayudarán a entender un poco mejor su funcionamiento.

En la imagen arriba vemos un texto de ejemplo, vamos a buscar, por ejemplo; todas las palabras que empiezan por una letra s. La expresión regular a utilizar sería:

\bs

A continuación, vemos el resultado de la búsqueda:

regexp1

Hay 9 coincidencias, en la sección superior derecha, vemos una explicación de la expresión regular.

Remover caracteres de retorno de línea – EOF

En ocasiones, necesitamos remover caracteres no deseados de un archivo de texto, uno de los casos a los que particularmente me he enfrentado, es la necesidad de remover caracteres de retorno de línea o fin de línea, el fin de línea en un archivo lo conseguimos presionando la tecla enter.

El fin de linea (EOL), en inglés end of line; se suele representar de forma diferente según el sistema de archivos donde el archivo es creado.

Según el sistema operativo se representa de la siguiente forma:

  • En Windows, se representa con CRLF, puede ser representado también con \r\n.
  • En sistemas basados en Unix, esto incluye Linux, se representa con LF, puede ser representado también con \n.

Editores de texto recomendados

En mi experencia personal, he podido trabajar con estos 3 editores de texto:

  • Visual Studio Code.
  • Sublime.
  • Notepad++.

No sería justo decir que uno es mejor que otro, comparten muchas características y también tienen particularidades, los 3 soportan el uso de expresiones regulares.

Ejercicio

Para este ejercicio, usaré visual studio code, el archivo csv (comma separated values) luce de la siguiente forma:

visual

Pueden descargar una copia del archivo desde aquí: sample_file.

El archivo consta de columnas separados por coma, y el contenido está encerrado entre comillas dobles. Este formato de archivo es comumente generado por herramientas que exportan datos a un archivo.

En visual studio code no he encontrado la forma de visualizar de forma sencilla los caracteres de retorno de línea, pero uso notepad++ para poder verlos con facilidad. Para verlos se debe habilitar la opción: View -> Show Symbol -> Show end of line.

En mi caso se muestran como LF, ya que mi archivo fue creado usando Ubuntu Linux.

notepad1.jpg

En esta última imagen, vemos al final de la primera línea, un retorno de línea (LF), ese retorno de línea debería estar efectivamente ahí,  en la segunda línea vemos que existe un LF dentro del contenido de un campo, al igual que el de la tercera línea, no queremos esos LF allí.

En resumen, todos los LF que esten dentro del contenido de un campo deben ser removidos, y los LF que dividen cada línea deben mantenerse.

Para realizar esto, debemos usar la siguiente expresión regular:

([^»])\n

Esta expressión va a buscar todos los LF (\n) que no están precedidos de una comilla doble. En visual studio code presionamos CTRL + F y pegamos nuestra expresión regular, en la imagen podemos ver como realizamos la búsqueda:

visual2

Ahora, para remover los caracteres de línea debemos usar la función reemplazar de visual studio code, lo hacemos presionando CTRL + H.

La expresion que debemos usar en reemplazar es $1 acompañado por un espacio, es decir: «$1 » pero sin las comillas dobles.

visual3

Luego presionamos CTRL + ALT + ENTER o el botón replace all, el archivo deberá lucir así:

visual5.png

Finalmente, el archivo tiene la estructura adecuada.

Esto es solo un ejemplo de lo que puede hacerse con expresiones regulares, incluso pueden aplicarse directamente con comandos de linux como sed.

Espero esto sea de utilidad.

Saludos!!!

RC

Deja un comentario