python: convertir links a html con expresiones regulares (regex)

Ya le vamos pillando el callo a python, en este caso pasaremos los links de un texto a html usando expresiones regulares

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re

text = "http://aaaaa       https://bbbbb ftp://ccccc\n http://dddddddd"

m = re.sub(r'(?i)(^|\s+|\A)(http|https|ftp)(\://\S+)(\s+|\Z|$)', '\\1<a href=\"\\1\\2\" onclick=\"window.open(this.href); return false;\">\\2\\3</a>\\4', text)

print m

Respuesta:

 

<a href="http://aaaaa" onclick="window.open(this.href); return false;">       <a href="https://bbbbb" onclick="window.open(this.href); return false;"> <a href="ftp://ccccc" onclick="window.open(this.href); return false;">
 <a href="http://dddddddd" onclick="window.open(this.href); return false;">

Ya sé que no es una expresión regular muy correcta ya que algunas cosas no debería abarcar pero bueno lo he hecho hasta que haya algún espacio en blanco o sea final de linea.

Explicación de la expresión regular:

  • r'(?i) -> para no diferenciar entre mayúsculas y minúsculas
  • (^|\s+|\A) -> espacio o primer carácter o comienzo de linea
  • (http|https|ftp) -> los links siempre empiezan con http O https O ftp
  • (\://\S+) -> : hay que escapara con el carácter \ luego // y para terminar \S+ para que pille cualquier carácter que no sea espacio
  • (\s+|\Z) -> espacio o último carácter o final de linea

Explicación del reemplazo:

  • \\1 significa el valor del primer () de la expresión regular: (^|\s+|\A)
  • \\2 significa el valor de la segunda () de la expresión regular: (http|https|ftp)
  • \\3 significa el valor de la tercera () de la expresión regular: (\://\S+)
  • \\4 significa el valor de la cuarta () de la expresión regular: (\s+|\Z|$)
This entry was posted in Gnu / Linux, Internet, Programacion, Tutoriales / Manuales and tagged , , . Bookmark the permalink.

Deja un comentario

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.