Skip to content

Commit 0310da6

Browse files
committed
Agregar ejemplos y ejercicios sobre expresiones regulares, metacaracteres, cuantificadores y conjuntos en Python
1 parent 683b639 commit 0310da6

File tree

4 files changed

+343
-0
lines changed

4 files changed

+343
-0
lines changed

05_regex/01_re.py

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
##
2+
# 01 - Expresiones regulares
3+
#
4+
5+
""" Las expresiones regulares son una secuencia de caracteres que forman un patrón de búsqueda.
6+
Se utilizan para la búsqueda de cadenas de texto, validación de datos, etc. """
7+
8+
9+
""" ¿Por qué aprender Regex?
10+
11+
- Búsqueda avanzada: Encontrar patrones específicos en textos grandes de forma rápida y precisa. (un editor de Markdown sólo usando Regex)
12+
13+
- Validación de datos: Asegurarte que los datos que ingresa un usuario como el email, teléfono, etc. son correctos.
14+
15+
- Manipulación del texto: Extraer, reemplazar y modificar partes de la cadena de texto fácilmente
16+
"""
17+
18+
# 1. Importar el módulo de expresiones regulares "re"
19+
import re
20+
# 2. Crear un patrón, que es una cadena de texto que describe lo que queremos encontrar
21+
pattern = "Hola"
22+
# 3. El texto donde queremos buscar
23+
text = "Hola mundo"
24+
# 4. Usar la función de búsqueda de "re"
25+
result = re.search(pattern, text)
26+
27+
if result:
28+
print("He encontrado el patrón en el texto")
29+
else:
30+
print("No he encontrado el patrón en el texto")
31+
32+
# .group() devuelve la cadena que coincide con el pattern
33+
print(result.group())
34+
35+
# .start() devolver la posición inicial de la coincidencia
36+
print(result.start())
37+
38+
# .end() devolver la posición final de la coincidencia
39+
print(result.end())
40+
41+
# EJERCICIO 01
42+
# Encuentra la primera ocurrencia de la palabra "IA" en el siguiente texto
43+
# e indica en que posición empieza y termina la coincidencia.
44+
text = "Todo el mundo dice que la IA nos va a quitar el trabajo. Pero solo hace falta ver cómo la puede cagar con las Regex para ir con cuidado"
45+
pattern = "IA"
46+
found_ia = re.search(pattern, text)
47+
48+
if found_ia:
49+
print(f"He encontrado el patrón en el texto en la posición {found_ia.start()} y termina en la posición {found_ia.end()}")
50+
else:
51+
print("No he encontrado el patrón en el texto")
52+
53+
# -----------------------
54+
55+
### Encontrar todas las coincidencias de un patrón
56+
# .findall() devuelve una lista con todas las coincidencias
57+
58+
text = "Me gusta Python. Python es lo máximo. Aunque Python no es tan difícil, ojo con Python"
59+
pattern = "Python"
60+
61+
matches = re.findall(pattern, text)
62+
63+
print(len(matches))
64+
65+
# -------------------------
66+
67+
# iter() devuelve un iterador que contiene todos los resultados de la búsqueda
68+
69+
text = "Me gusta Python. Python es lo máximo. Aunque Python no es tan difícil, ojo con Python"
70+
pattern = "Python"
71+
72+
matches = re.finditer(pattern, text)
73+
74+
for match in matches:
75+
print(match.group(), match.start(), match.end())
76+
77+
# EJERCICIO 02
78+
# Encuentra todas las ocurrencias de la palabra "midu" en el siguiente texto e indica en que posición empieza y termina cada coincidencia y cuantas veces se encontró.
79+
text = "Este es el curso de Python de midudev. ¡Suscríbete a midudev si te gusta este contenido! midu"
80+
81+
### Modificadores
82+
83+
# Los modificadores son opciones que se pueden agregar a un patrón para cambiar su comportamiento
84+
85+
# re.IGNORECASE: Ignora las mayúsculas y minúsculas
86+
87+
text = "Todo el mundo dice que la IA nos va a quitar el trabajo. Pero la ia no es tan mala. ¡Viva la Ia!"
88+
pattern = "IA"
89+
found = re.findall(pattern, text, re.IGNORECASE)
90+
91+
if found: print(found)
92+
93+
# EJERCICIO 03
94+
# Encuentra todas las ocurrencias de la palabra "python" en el siguiente texto, sin distinguir entre mayúsculas y minúsculas.
95+
text = "Este es el curso de Python de midudev. ¡Suscríbete a python si te gusta este contenido! PYTHON"
96+
97+
### Reemplazar el texto
98+
99+
# .sub() reemplaza todas las coincidencias de un patrón en un texto
100+
101+
text = "Hola, mundo! Hola de nuevo. Hola otra vez."
102+
pattern = "hola"
103+
replacement = "Adiós"
104+
105+
new_text = re.sub(pattern, replacement, text, flags=re.IGNORECASE)
106+
print(new_text)

05_regex/02_metachars.py

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
###
2+
# 02 - Meta caracteres
3+
# Los metacaracteres son simbolos especiales con significados especificos en las expresiones regulares
4+
###
5+
6+
import re
7+
8+
# 1. El punto (.)
9+
# Coincidir con cualquier caracter excepto una nueva linea
10+
11+
text = "Hola mundo, H0la de nuevo, H$la otra vez"
12+
pattern = "H.la" # Hola, H0la, H$la
13+
14+
found = re.findall(pattern, text)
15+
16+
if (found):
17+
print(found)
18+
else:
19+
print("No se ha encontrado el patrón")
20+
21+
22+
text = "casa caasa cosa cisa cesa causa"
23+
pattern = "c.sa"
24+
25+
matches = re.findall(pattern, text)
26+
print(matches)
27+
28+
# --------------------
29+
30+
text = "Hola mundo, H0la de nuevo, H$la otra vez"
31+
pattern = r"H.la" # Hola, H0la, H$la
32+
33+
found = re.findall(pattern, text)
34+
35+
if (found):
36+
print(found)
37+
else:
38+
print("No se ha encontrado el patrón")
39+
40+
41+
# Cómo usar la barra invertida para anular el significado especial de un símbolo
42+
text = "Mi casa es blanca. Y el coche es negro."
43+
pattern = r"\."
44+
45+
matches = re.findall(pattern, text)
46+
47+
print(matches)
48+
49+
# \d: coincide con cualquier dígito (0-9)
50+
51+
text = "El número de teléfono es 123456789"
52+
found = re.findall(r'\d{9}', text)
53+
54+
print(found)
55+
56+
# Ejercicio: Detectar si hay un número de España en el texto gracias al prefijo +34
57+
58+
text = "Mi número de teléfono es +34 688999999 apúntalo vale?"
59+
pattern = r"\+34 \d{9}"
60+
found = re.search(pattern, text)
61+
if found: print(f"Encontré el número de teléfono {found.group()}")
62+
63+
# \w: Coincide con cualquier caracter alfanumerico (a-z, A-Z, 0-9, _)
64+
65+
text = "el_rubius_69"
66+
pattern = r"\w"
67+
found = re.findall(pattern, text)
68+
print(found)
69+
70+
# \s: Coincide con cualqueir espacio en blanco (espacio, tabulación, salto de línea)
71+
text = "Hola mundo\n¿Cómo estás?\t"
72+
pattern = r"\s"
73+
matches = re.findall(pattern, text)
74+
print(matches)
75+
76+
# ^: Coincide con el principio de una cadena
77+
username = "423_name%22"
78+
pattern = r"^\w" # validar nombre de usuario
79+
80+
valid = re.search(pattern, username)
81+
82+
if valid: print("El nombre de usuario es válido")
83+
else: print("El nombre de usuario no es válido")
84+
85+
phone = "+34 688999999"
86+
pattern = r"^\+\d{1,3} "
87+
88+
valid = re.search(pattern, phone)
89+
90+
if valid: print("El número de teléfono es válido")
91+
else: print("El número de teléfono no es válido")
92+
93+
# $: Coincide con el final de una cadena
94+
text = "Hola mundo."
95+
pattern = r"mundo$"
96+
97+
valid = re.search(pattern, text)
98+
99+
if valid: print("La cadena es válida")
100+
else: print("La cadena no es válida")
101+
102+
# EJERCICIO
103+
# Valida que un correo sea de gmail
104+
text = "miduga@hotmail.com"
105+
pattern = r"@gmail.com$"
106+
valid = re.search(pattern, text)
107+
108+
if valid: print("El correo es gmail válido")
109+
else: print("El correo no es válido")
110+
111+
# EJERCICIO:
112+
# Tenemos una lista de archivos, necesitamos saber los nombres de los ficheros con extension .txt
113+
files = "file1.txt file2.pdf midu-of.webp secret.txt"
114+
115+
# \b: Coincide con el principio o final de una palabra
116+
text = "casa casada cosa cosas casado casa"
117+
pattern = r"\bc.sa\b"
118+
119+
found = re.findall(pattern, text)
120+
print(found)
121+
122+
# |: Coincidr con una opción u otra
123+
fruits = "platano, piña, manzana, aguacate, palta, pera, aguacate, aguacate"
124+
pattern = r"palta|aguacate|p..a|\b\w{7}\b"
125+
126+
matches = re.findall(pattern, fruits)
127+
print(matches)

05_regex/03_quantifiers.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
###
2+
# 03 - Quantifiers
3+
# Los cuantificadores se utilizan para especificar cuántas ocurrencias de un carácter o grupo de caracteres se deben encontrar en una cadena.
4+
###
5+
6+
import re
7+
8+
# *: Puede aparecer 0 o más veces
9+
text = "aaaba"
10+
pattern = "a*"
11+
matches = re.findall(pattern, text)
12+
print(matches)
13+
14+
# Ejercicio 1:
15+
# ¿Cuantas palabras tienen de 0 a más "a" y después una b?
16+
17+
# +: Una a más veces
18+
text = "dddd aaa ccc a bb aa casa"
19+
pattern = "a+"
20+
matches = re.findall(pattern, text)
21+
print(matches)
22+
23+
# ?: Cero o una vez
24+
text = "aaabacb"
25+
pattern = "a?b"
26+
matches = re.findall(pattern, text)
27+
print(matches)
28+
29+
# Ejercicio: Haz opcional que aparezca un +34 en el siguiente texto
30+
phone = "+34 688999999"
31+
32+
# {n}: Exactamente n veces
33+
text = "aaaaaa aa aaaa"
34+
pattern = "a{3}"
35+
matches = re.findall(pattern, text)
36+
37+
print(matches)
38+
39+
# {n, m}: De n a m veces
40+
text = "u uu uuu u"
41+
pattern = r"\w{2,3}"
42+
matches = re.findall(pattern, text)
43+
print(matches)
44+
45+
# Ejercicio:
46+
# Encuentra las palabras de 4 a 6 letras en el siguiente texto
47+
words = "ala casa árbol león cinco murcielago"
48+
pattern = r"\b\w{4,6}\b"
49+
matches = re.findall(pattern, words)
50+
print(matches)
51+
52+
# Ejercicio
53+
# Encuentra las palabras de más de 6 letras
54+
words = "ala fantastico casa árbol león cinco murcielago"
55+
pattern = r"\b\w{6,}\b"
56+
matches = re.findall(pattern, words)
57+
print(matches)

05_regex/04_sets.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import re
2+
3+
# [:] Coincide con cualquier caracter dentro de los corchetes
4+
5+
username = "rub.$ius_69+"
6+
pattern = r"^[\w._%+-]+$"
7+
8+
match = re.search(pattern, username)
9+
if match:
10+
print("El nombre de usuario es válido: ", match.group())
11+
else:
12+
print("El nombre de usuario no es válido")
13+
14+
15+
# Buscar todas las vocales de una palabra
16+
text = "Hola mundo"
17+
pattern = r"[aeiou]"
18+
matches = re.findall(pattern, text)
19+
print(matches)
20+
21+
# Una Regex para encontrar las palabras man, fan y ban
22+
# pero ignora el resto
23+
text = "man ran fan ñan ban"
24+
pattern = r"[mfb]an"
25+
26+
matches = re.findall(pattern, text)
27+
print(matches)
28+
29+
# Ejercicio:
30+
# Nos han complicado el asunto, porque ahora hay palabras que encajan pero no empiezan por esas letras.
31+
# Solo queremos las palabras man, fan y ban
32+
text = "omniman fanatico man bandana"
33+
# \b
34+
35+
text = "22"
36+
pattern = r"[4-9]"
37+
38+
matches = re.findall(pattern, text)
39+
print(matches)
40+
41+
42+
# Ejercicio final con todo lo aprendido
43+
# Mejorar esto: https://www.computerhope.com/jargon/r/regular-expression.png
44+
45+
## Buscar corner cases que no pasa y arreglarlo:
46+
"lo.que+sea@shopping.online"
47+
"michael@gov.co.uk"
48+
49+
# [^]: Coincide con cualquier caracter que no esté dentro de los corchetes
50+
text = "Hola mundo"
51+
pattern = r"[^aeiou]"
52+
matches = re.findall(pattern, text)
53+
print(matches)

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy