Curso
Si quieres hacer nuestro curso gratuito de introducción a R, aquí tienes el enlace.
Extraer valores numéricos de cadenas
Extraer números de cadenas es una tarea habitual, sobre todo cuando trabajas con datos no estructurados o archivos de registro.
Imagina que tienes la siguiente cadena: 'the recipe calls for 6 strawberries and 2 bananas'.
Sería útil extraer el 6 y el 2 de esta cadena para guardarlos y después comparar la proporción de fresas y plátanos.
Cuando uses una expresión regular para extraer varios números (o, más exactamente, varias coincidencias de patrón), puedes recurrir a la función re.findall(). Dan no la trató en el vídeo, pero es fácil de usar: pasas un patrón y una cadena a re.findall() y devuelve una lista con las coincidencias.
Instrucciones
- Importa
re. - Escribe un patrón que encuentre todos los números en la siguiente cadena:
'the recipe calls for 10 strawberries and 1 banana'. Para ello:- Usa la función
re.findall()y pásale dos argumentos: primero el patrón y después la cadena. \des el patrón para encontrar dígitos. Debe ir seguido de un+para que el elemento anterior coincida una o más veces. Así te aseguras de que10se considere un único número y no1y0por separado.
- Usa la función
- Imprime las coincidencias para confirmar que tu expresión regular encontró los valores
10y1.
# Import the regular expression module
____
# Find the numeric values: matches
matches = re.findall('____', '____')
# Print the matches
print(____)
# Import the regular expression module
import re
# Find the numeric values: matches
matches = re.findall('\d+', 'the recipe calls for 10 strawberries and 1 banana')
# Print the matches
print(matches)
Ex().test_import('re')
Ex().test_correct(test_object('matches'), test_function('re.findall'))
Ex().test_function('print')
success_msg('Excellent work - your regular expression successfully extracted the numeric values 10 and 1 from the string!')
- Usa el comando
import xpara importar el módulox. - El primer argumento de
re.findall()debe ser\d+y el segundo la cadena:'the recipe calls for 10 strawberries and 1 banana'. - Usa la función
print()para imprimirmatches.
Si esto te ha quedado claro, sigue con el siguiente ejercicio. Si no, aquí tienes un vídeo de resumen.
Vídeo general sobre cómo usar expresiones regulares para limpiar cadenas en Python
Búsqueda de patrones
En este ejercicio seguirás practicando con expresiones regulares. Para cada cadena proporcionada, tu tarea es escribir el patrón adecuado para que coincida.
Instrucciones
- Escribe patrones para que coincidan con:
- Un número de teléfono con el formato
xxx-xxx-xxxx. Ya lo hiciste en un ejercicio anterior. - Una cadena con el formato: un símbolo de dólar, un número arbitrario de dígitos, un punto decimal y 2 dígitos.
- Usa
\$para el símbolo del dólar,\d*para un número arbitrario de dígitos,\.para el punto decimal y\d{x}para que coincida conxdígitos.
- Usa
- Un número de teléfono con el formato
- Una letra mayúscula seguida de un número arbitrario de caracteres alfanuméricos.
- Usa
[A-Z]para cualquier letra mayúscula seguido de\w*para un número arbitrario de caracteres alfanuméricos.
- Usa
import re
# Write the first pattern
pattern1 = bool(re.match(pattern='____', string='123-456-7890'))
print(pattern1)
# Write the second pattern
pattern2 = bool(re.match(pattern='____', string='$123.45'))
print(pattern2)
# Write the third pattern
pattern3 = bool(re.match(pattern='____', string='Australia'))
print(pattern3)
# Write the first pattern
pattern1 = bool(re.match(pattern='\d{3}-\d{3}-\d{4}', string='123-456-7890'))
print(pattern1)
# Write the second pattern
pattern2 = bool(re.match(pattern='\$\d*\.\d{2}', string='$123.45'))
print(pattern2)
# Write the third pattern
pattern3 = bool(re.match(pattern='[A-Z]\w*', string='Australia'))
print(pattern3)
Ex().test_correct(test_object('pattern1'), test_function('re.match', index=1))
Ex().test_function('print', index=1)
Ex().test_correct(test_object('pattern2'), test_function('re.match', index=2))
Ex().test_function('print', index=2)
Ex().test_correct(test_object('pattern3'), test_function('re.match', index=3))
Ex().test_function('print', index=3)
success_msg("Great work! You're mastering the fundamentals of writing regular expressions!")
- Hay tres componentes en el primer patrón con el que tu expresión regular debe coincidir:
xxx,xxxyxxxx. Los dos primeros se corresponden con\d{3}, mientras que el último se corresponde con\d{4}. Cada componente debe estar separado por un-.
Si quieres aprender más con este curso, aquí tienes el enlace.
Echa un vistazo al Python String Tutorial de DataCamp.
