Introducció a les expressions regulars amb StringR

Author

Mireia Camacho

La llibreria StringR

StringR és una llibreria que forma part de l’entorn Tidyverse i està especialitzada en el tractament i anàlisi de textos.

En aquesta classe ens dedicarem a veure les funcions que conté la llibreria i quines facilitats ens proporcionen a l’hora de tractar amb textos.

El concepte ‘string’

En programació s’anomena ‘string’ als elements de text. És el que traduït nosaltres anomenem ‘cadena de caràcters’. En anglès també significa ‘corda’.

A R els ‘strings’ sempre van entre cometes i es cataloguen dins la classe character.

library(tidyverse)
string <- "una string"

strings_variable <- c("Podem convertir", "diferents strings", "en files d'una variable.")

strings_variable
[1] "Podem convertir"          "diferents strings"       
[3] "en files d'una variable."
paste("També podem", "enganxar", string, "amb una altra.")
[1] "També podem enganxar una string amb una altra."

Funcions de stringR

1. Manipulació bàsica de textos

  • str_length(): Retorna la longitud en caràcters d’una string.
str_length("Aquí hi ha 24 caràcters.") # Noteu que també es compten com a caràcters els espais.
[1] 24
  • str_sub(): extreu o substitueix elements de la cadena de text.
str_sub("Aquí hi ha 24 caràcters.", start = 12, end = 13) 
[1] "24"
str_sub("Aquí hi ha 24 caràcters.", start = -10) 
[1] "caràcters."
substitucio <- "Aquí hi ha 24 caràcters."

str_sub(substitucio, 12, 13) <- "100"

substitucio
[1] "Aquí hi ha 100 caràcters."
  • str_to_upper() i str_to_lower(): canvien tot el text a majúscules o a minúscules.
str_to_upper("això són minúscules")
[1] "AIXÒ SÓN MINÚSCULES"
str_to_lower("AIXÒ SÓN MAJÚSCULES")
[1] "això són majúscules"
  • str_c(): Enllaça cadenes en una sola. Similar a la funció paste().
str_c("També podem", "enganxar", "una string", "amb una altra.", sep = " ")
[1] "També podem enganxar una string amb una altra."
str_c("També podem", "enganxar", "una string", "amb una altra.", sep = "/")
[1] "També podem/enganxar/una string/amb una altra."
str_c("També podem", "enganxar", "una string", "amb una altra.", sep = "+")
[1] "També podem+enganxar+una string+amb una altra."

2. Detecció de patrons

  • str_detect(): Detecta si un patró apareix en una cadena de text. Retorna TRUE o FALSE.
str_detect("Això és una string.", "string")
[1] TRUE
str_detect("Això és un número.", "string")
[1] FALSE
  • str_which(): Retorna la posició en la que apareix el patró que busquem dins d’un vector/variable.
posicions <- c("Això és una string.", "Això és un número.")

str_which(posicions, "string")
[1] 1
  • str_count(): Retorna el nombre de vegades que apareix el patró en una string.
str_count("Això és una string, però allò altre no és una string.", "string")
[1] 2
str_count("Això és una string, però allò altre no és una string.", "a") ## Vigileu amb les majúscules!
[1] 4
recompte <- c("Això és una string, però allò altre no és una string.", "Vols dir que allò no és una string?")

str_count(recompte, "string")
[1] 2 1

3. Extracció de text

  • str_extract(): Extreu del text la primera coincidència del patró que necessitem.
str_extract("abc123def456", "\\d+") # Extreu els primers dígits (números) de la cadena de text.
[1] "123"
  • str_extract_all(): Extreu del text totes les coincidències del patró que necessitem.
str_extract_all("abc123def456", "\\d+") # Extreu TOTS dígits (números) de la cadena de text.
[[1]]
[1] "123" "456"

4. Divisió de textos

  • str_split(): Divideix una cadena de text segons un delimitador (una coma, un espai en blanc…).
str_split("Hola, com estàs?", ",")
[[1]]
[1] "Hola"        " com estàs?"
str_split("Hola, com estàs?", " ")
[[1]]
[1] "Hola,"  "com"    "estàs?"
str_split("Hola, com estàs?", "e")
[[1]]
[1] "Hola, com " "stàs?"     
  • str_trim(): Elimina espais en blanc a l’inici i al final de la cadena de text.
str_trim("  Hola, com estàs?  ")
[1] "Hola, com estàs?"
  • str_squish(): Elimina tots els espais “no convencionals” de la cadena de text.
str_squish("  Hola, com estàs?  ")
[1] "Hola, com estàs?"
str_squish("  Hola,        com estàs?  ")
[1] "Hola, com estàs?"
str_squish("  Hola,   com   estàs?  ")
[1] "Hola, com estàs?"

5. Ordenar les cadenes de text

  • str_sort(): Ordena els textos de dins d’un vector alfabèticament.
str_sort(c("b", "a", "c"))
[1] "a" "b" "c"
  • str_order(): Retorna un vector amb la posició en la que hauria d’anar cada element del vector si estiguéssin ordenats alfabèticament.
str_order(c("b", "a", "c"))
[1] 2 1 3