1
+ import re
2
+
3
+ """
4
+ /*
5
+ * EJERCICIO:
6
+ * Utilizando tu lenguaje, explora el concepto de expresiones regulares,
7
+ * creando una que sea capaz de encontrar y extraer todos los números
8
+ * de un texto.
9
+ """
10
+
11
+ txt = """
12
+ Cristiano Ronaldo dos Santos Aveiro (Funchal, Madeira, 5 de febrero de 1985)
13
+ es un futbolista portugués. Juega como delantero y su equipo actual es el
14
+ Al-Nassr F. C. de la Liga Profesional Saudí. Es internacional absoluto con la
15
+ selección de Portugal, de la cual es capitán, máximo goleador histórico y
16
+ jugador con más presencias con 217 partidos, logro alcanzado en las eliminatorias
17
+ para la Eurocopa 2024, reconocido por el Libro Guinness de los récords.
18
+ """
19
+
20
+ regex_pattern = r"\d+"
21
+
22
+ matches = re .findall (regex_pattern , txt )
23
+ print (matches )
24
+
25
+ """
26
+ * DIFICULTAD EXTRA (opcional):
27
+ * Crea 3 expresiones regulares (a tu criterio) capaces de:
28
+ * - Validar un email.
29
+ * - Validar un número de teléfono.
30
+ * - Validar una url.
31
+ */
32
+ """
33
+
34
+ # Validando un e-mail
35
+
36
+ def email_validation (email ):
37
+
38
+ reg_pattern = r"^[a-zA-Z0-9]+([.+-_][a-zA-Z0-9]+)*@([a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$"
39
+
40
+ # Verificamos si toda la cadena coincide con el patron
41
+
42
+ return True if re .fullmatch (reg_pattern , email ) else False
43
+
44
+
45
+ emails = [
46
+
47
+
48
+
49
+
50
+ "mal.correo@com" , # Inválido (extensión incorrecta)
51
+ "sin-arroba.com" , # Inválido (falta @)
52
+ "@sin_nombre.com" # Inválido (falta nombre)
53
+ ]
54
+
55
+ for email in emails :
56
+ print (f"{ email } : { "Valido" if email_validation (email ) else "Invalido" } " )
57
+
58
+ # Validando un número de telefono en Colombia.
59
+ # Formato 300-000-0000, debe tener 10 digitos
60
+
61
+ def phone_validation (phone ):
62
+
63
+ reg_pattern = r'^([3][0-9]{2}-?[0-9]{3}-?[0-9]{4})'
64
+ return True if re .fullmatch (reg_pattern , phone ) else False
65
+
66
+
67
+ print (phone_validation ("320-326-7902" )) # True
68
+ print (phone_validation ("320-326-790235" )) # False
69
+ print (phone_validation ("3203267902" )) # True
70
+ print (phone_validation ("2203267902" )) # False
71
+
72
+
73
+
74
+ # Validando una URL
75
+ def url_validate (url :str ) -> bool :
76
+
77
+ pattern = (
78
+ r'^(https?://)' # Protocolo
79
+ r'([a-zA-Z0-9-]+\.)*' # Subdominios
80
+ r'[a-zA-Z]{2,}' # TLD ej. (.com , .org)
81
+ r'(:[0-9]{1,5})?' # Puerto (opcional) ej. :8000
82
+ r'(/.*)?$'
83
+ )
84
+ # reg_pattern = r'^(https?://)?(www\.)?([a-zA-Z0-9.-]+)\.[a-zA-Z]{2,6}(/.*)?$'
85
+
86
+ return True if re .fullmatch (pattern , url ) else False
87
+
88
+
89
+ urls = [
90
+ "https://www.google.com" , # Válido
91
+ "http://example.org" , # Válido
92
+ "https://sub.dominio.co/path?query=123" , # Válido
93
+ "ftp://invalid.com" , # Inválido (no es HTTP o HTTPS)
94
+ "www.nodominio" , # Inválido (falta extensión)
95
+ "http://localhost:8000" , # Valido
96
+ ]
97
+
98
+
99
+ print ("\n Validación de URLs:" )
100
+ for url in urls :
101
+ print (f"{ url } : { 'Válido' if url_validate (url ) else 'Inválido' } " )
0 commit comments