Github : https://github.com/ydmarinb

Que son las expresiones regulares

Expresión regular, también conocida como regex, regexp o expresión racional, es una secuencia de caracteres que forma un patrón de búsqueda, principalmente utilizada para la búsqueda de patrones de cadenas de caracteres u operaciones de sustituciones.

Téoria

Las expresiones regulares se construyen utilizando los operadores unión, concatenación y clausura de Kleene.

La clausura de Kleene : es una operación que se aplica sobre un conjunto de cadenas de caracteres o un conjunto de símbolos o caracteres, y representa el conjunto de las cadenas que se pueden formar tomando cualquier número de cadenas del conjunto inicial, posiblemente con repeticiones, y concatenándolas entre sí.

Cuantificadores

Un Cuatinficardor que precede a un caracter cuantifica las veces que este caracter puede aparecer.

  • ? El caracter que precede puede aparecer como mucho una vez.
  • + El carácter que le precede debe aparecer al menos una vez.
  • * El carácter que le precede puede aparecer cero, una, o más veces.
  • {} Las llaves juegan el papel de meta caracteres, para que cumplan su funcionalidad deben estar despues de la expresión regular y encierren uno o varios números.
    • {n} Indica que coincide n veces.
    • {n,} Indica que coincide mas n veces.
    • {,n} Indica que coincide hasta n veces.
    • {n,m} Indica que coincide mas n veces y menos de m veces.

Alternación

  • $ El signo de dolar representa el final de la cadena de caracteres o el final de la línea.

  • ^ El acento representa el inicio de la cadena.

Agrupación

  • () Los parentesis son usados para la aplicación de operadores sobre mas de un caracter.

  • [] Los corchetes agrupan caracteres en grupos o clases. Son útiles cuando es necesario buscar uno de un grupo de caracteres.
    • [a-z] Especifica un rango de caracteres.
    • [^.... ] Lista de caracteres excluidos
  • | Una barra vertical separa las alternativas. Realiza el papel de o.

  • . El punto busca cualquier carácter sin incluir los saltos de línea.

Barra invertida

Se utiliza para escapar el siguiente carácter de la expresión de búsqueda de forma que este adquiera un significado especial o deje de tenerlo.

  • \a — Representa una “campana” o “beep” que se produce al imprimir este carácter.
  • \e — Representa la tecla “Esc” o “Escape”

  • \x — Se utiliza para representar caracteres ASCII o ANSI si conoce su código. De esta forma, si se busca el símbolo de derechos de autor y la fuente en la que se busca utiliza el conjunto de caracteres Latin-1 es posible encontrarlo utilizando “9”.
  • \d — Representa un dígito del 0 al 9.
  • \w — Representa cualquier carácter alfanumérico.
  • \s — Representa un espacio en blanco.
  • \D — Representa cualquier carácter que no sea un dígito del 0 al 9.
  • \W — Representa cualquier carácter no alfanumérico.
  • \S — Representa cualquier carácter que no sea un espacio en blanco.
  • \A — Representa el inicio de la cadena. No un carácter sino una posición.
  • \Z — Representa el final de la cadena. No un carácter sino una posición.
  • \b — Marca la posición de una palabra limitada por espacios en blanco, puntuación o el inicio/final de una cadena.
  • \B — Marca la posición entre dos caracteres alfanuméricos o dos no-alfanuméricos.

El signo de admiración

  • ! El signo de admiración representa una busqueda negativa, en otras palabras que no incluya la palabra que especificamos.

Metacaracters especiales

  • \t — Representa un tabulador.
  • \r — Representa el “retorno de carro” o “regreso al inicio” o sea el lugar en que la línea vuelve a iniciar.
  • \n — Representa la “nueva línea” el carácter por medio del cual una línea da inicio.
  • \f — Representa un salto de página
  • \v — Representa un tabulador vertical

Implementación en R

string <- c("R es el mejor lenguaje", " Es un lenguaje vectorizado",
            " Es muy bueno en analítica")
patron <- '(R|lenguaje)'

Detección del patron.

# Da la posición de las fraces que contienen el patron
grep(pattern = patron, string) 
## [1] 1 2
# Extrae las oraciones que contienen el patron
grep(pattern = patron, string, value = T)
## [1] "R es el mejor lenguaje"      " Es un lenguaje vectorizado"
# valores logicos
grepl(pattern = patron, string)
## [1]  TRUE  TRUE FALSE
stringr::str_detect(pattern = patron, string)
## [1]  TRUE  TRUE FALSE

División de un strig usando un patron

strsplit(string, patron)
## [[1]]
## [1] ""              " es el mejor "
## 
## [[2]]
## [1] " Es un "      " vectorizado"
## 
## [[3]]
## [1] " Es muy bueno en analítica"
stringr::str_split(string, patron)
## [[1]]
## [1] ""              " es el mejor " ""             
## 
## [[2]]
## [1] " Es un "      " vectorizado"
## 
## [[3]]
## [1] " Es muy bueno en analítica"

Localización del patron

stringr::str_locate(string , patron)
##      start end
## [1,]     1   1
## [2,]     8  15
## [3,]    NA  NA
stringr::str_locate_all(string , patron)
## [[1]]
##      start end
## [1,]     1   1
## [2,]    15  22
## 
## [[2]]
##      start end
## [1,]     8  15
## 
## [[3]]
##      start end

Extraer patron

# Extraer solo las primeras coincidencias
regmatches(string, regexpr(patron, string))
## [1] "R"        "lenguaje"
#Extraer todas las conincidencias
regmatches(string, gregexpr(patron, string))
## [[1]]
## [1] "R"        "lenguaje"
## 
## [[2]]
## [1] "lenguaje"
## 
## [[3]]
## character(0)
# Extraer solo las primeras coincidencias
stringr::str_extract(string , patron)
## [1] "R"        "lenguaje" NA
# Extraer solo las primeras coincidencias en una lista
stringr::str_extract_all(string , patron)
## [[1]]
## [1] "R"        "lenguaje"
## 
## [[2]]
## [1] "lenguaje"
## 
## [[3]]
## character(0)
# Extraer solo las primeras coincidencias en una matriz
stringr::str_extract_all(string , patron, simplify = T)
##      [,1]       [,2]      
## [1,] "R"        "lenguaje"
## [2,] "lenguaje" ""        
## [3,] ""         ""

Reemplazar patron

# Reemplaza la primera coincidencia
sub(patron, c("python"), string)
## [1] "python es el mejor lenguaje" " Es un python vectorizado"  
## [3] " Es muy bueno en analítica"
# Reemplaza todas las coincidencias
gsub(patron, c("python"), string)
## [1] "python es el mejor python"  " Es un python vectorizado" 
## [3] " Es muy bueno en analítica"
# Reemplaza la primera coincidencia
stringr::str_replace(string, patron, "python")
## [1] "python es el mejor lenguaje" " Es un python vectorizado"  
## [3] " Es muy bueno en analítica"
# Reemplaza todas las coincidencias
stringr::str_replace_all(string, patron, "python")
## [1] "python es el mejor python"  " Es un python vectorizado" 
## [3] " Es muy bueno en analítica"