# importando el modulo de regex de python
import re 

# texto de entrada
becquer = """Podrá nublarse el sol eternamente; 
Podrá secarse en un instante el mar; 
Podrá romperse el eje de la tierra 
como un débil cristal. 
¡todo sucederá! Podrá la muerte 
cubrirme con su fúnebre crespón; 
Pero jamás en mí podrá apagarse 
la llama de tu amor."""



# patron para dividir donde no encuentre un caracter alfanumerico
patron = re.compile(r'\W+')



palabras = patron.split(becquer)
print(palabras[:10])  # 10 primeras palabras


# Utilizando la version no compilada de split.
print(re.split(r'\n', becquer))  # Dividiendo por linea.




# Utilizando el tope de divisiones
print(patron.split(becquer, 5))


# Cambiando "Podrá" o "podra" por "Puede"
podra = re.compile(r'\b(P|p)odrá\b')
puede = podra.sub("Puede", becquer)
print(puede)





# Limitando el número de reemplazos
puede = podra.sub("Puede", becquer, 2)
print(puede)


# Utilizando la version no compilada de subn
print(re.subn(r'\b(P|p)odrá\b', "Puede", becquer))  # se realizaron 5 reemplazos




# Ejemplo de IGNORECASE
# Cambiando "Podrá" o "podra" por "Puede"
podra = re.compile(r'podrá\b', re.I)  # el patrón se vuelve más sencillo
puede = podra.sub("puede", becquer)
print(puede)




# Ejemplo de VERBOSE
mail = re.compile(r"""
\b             # comienzo de delimitador de palabra
[\w.%+-]       # usuario: Cualquier caracter alfanumerico mas los signos (.%+-)
+@             # seguido de @
[\w.-]         # dominio: Cualquier caracter alfanumerico mas los signos (.-)
+\.            # seguido de .
[a-zA-Z]{2,6}  # dominio de alto nivel: 2 a 6 letras en minúsculas o mayúsculas.
\b             # fin de delimitador de palabra
""", re.X)

mails = """raul.lopez@relopezbriega.com, Raul Lopez Briega,
foo bar, relopezbriega@relopezbriega.com.ar, raul@github.io, 
https://relopezbriega.com.ar, https://relopezbriega.github.io, 
python@python, river@riverplate.com.ar, pythonAR@python.pythonAR
"""

# filtrando los mails con estructura válida
print(mail.findall(mails))






# Validando una fecha
fecha = re.compile(r'^(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/((19|20)\d\d)$')

# validando 13/02/1982
print(fecha.search("13/02/1982"))

# no valida 13-02-1982
print(fecha.search("13-02-1982"))

# no valida 32/12/2015
print(fecha.search("32/12/2015"))

# no valida 30/14/2015
print(fecha.search("30/14/2015"))




