Introducción a Regex
Tags: regex, python, spanish, beginners
Published: 2022-07-16 02:34:31

# Visión General
En este blog veremos una introducción a regex en python. Es importante al utilizar regex saber manipular strings y utilizar el modulo re, a continuación mostrare ejemplos básicos.

## Syntax Requerida

- strings

para este ejercicio recorreremos un string para aplicar regex más fácilmente vamos despedazar un string en substrings, esto lo logramos con el metodo split
```python
.split(separator,maxsplit)
```
sus parámetros opcionales son separator y maxsplit
separator: sirve para indicar en que carácter del string se va a hacer la separacion del string, por defecto es un espacio en blanco
maxsplit: es el número máximo de veces que se separara la string

Ejemplo:

```python
example_string = "Hello World"
print(example_string.split())
```

output:

```python
>> ["Hello","World"]
```

- modulo re

El modulo re es usado principalmente para generar expresiones regulares o regex para su previo uso.

regex: son usados para "filtrar" substrings específicos de textos, estan compuestos de caracteres y metacaracteres.

caracteres: hacen match consigo mismo.
> ejemplo: todas los caracteres conocidos incluso los especiales.
metacaracteres: son propios de regex hacen match a caracteres específicos  o números
> ejemplo: \d \D \w \W \s \S ^ $ [] . |
cuantificadores: indican cuantas veces aparece o no un caracter o metacaracter
> ejemplo: ? {} + *

# Ejemplo 1

Queremos extraer los substrings que contengan un numero.

```python
import re
example_string = "4abc a solo $100"
pattern = re.compile(r'\$?\d{1,3}')
for numero in example_string.split():
    if pattern.match(numero):
        print(numero)
```
output:
```
>> 4abc
>> $100
```
## Explicación

- primero importamos el módulo .
- teniendo example_string queremos extraer los substrings que contengan un número.
- Aqui generamos el patron o "pattern", tenemos dos numeros el primero empieza con un signo de dolor "$" como es un metacaracter lo escapamos con un backslash, pero como el otro número  no tiene agregamos el cuantificador "?" que indica que el carácter a la izquierda puede aparecer cero o una vez, luego ponemos el metacaracter \d que indica que hay un dígito  de 0 a 9 y con el cuantificador "{}" indicamos que el numero aparece 1 a 3 veces, lo cual esta bien ya que tenemos el 4 de 1 dígito y el 100 de 3 dígitos. 
- recorremos el string, con un bucle for, dividiéndolo en una lista de substrings con split()
- vemos si hace match el patron con el substring en numero, "filtramos" el string
- finalmente imprimimos el numero

# Ejemplo 2

Tenemos un texto del que queremos extraer hashtags.

```python
import re
my_string = "esta es mi canción #favorita de toda la vida #4ever"
hashtags = []
for hashtag in my_string.split():
    if re.match(r'\#4?[a-z]',hashtag):
        hashtags.append(hashtag)
print(hashtags)
``` 
output:
```
>> ["#favorita","#4ever"]
```
## Explicación
- primero importamos el módulo 
- teniendo my_string queremos extraer los hashtags
- creamos una lista de hashtags para contener los hashtags filtrados
- recorremos el string, con un bucle for, dividiéndolo en una lista de substrings con split()
- vemos si hace match el patron, esta vez para variar lo generamos en el mismo método, con cada substring. En el patron generado primero escapamos el hashtag, luego ponemos un 4 con el cuantificador "?" ya que un hashtag tiene 1 cuatro y el otro tiene 0 cuatros y ponemos un rango con "[]", un rango sirve para indicar un rango de caracteres, indicamos de la a-z en minúsculas, ya que los hashtags son en minúsculas, asi abarcamos todo el hashtag.
- agregamos a la lista de hashtags los substring que sean hashtags
- finalmente imprimimos la lista de hashtags.