funcion - Problema de expresiones regulares en gsub
funcion gsub en r (4)
¿Podría por favor intentar seguir y hacerme saber si esto le ayuda?
vec <- c("5f 110y, Fast")
gsub(".*,","",vec)
O
gsub("[[:alnum:]]+ [[:alnum:]]+,","",vec)
He definido
vec <- "5f 110y, Fast"
y
gsub("[//s0-9a-z]+,", "", vec)
da " 5f Fast
"
Hubiera esperado que diera " Fast
", ya que todo antes de la coma debería coincidir con la expresión regular.
¿Puede alguien explicarme por qué este no es el caso?
Debe tener en cuenta que, en los patrones de expresiones regulares de TRE, no puede usar escapes de expresiones regulares como /s
, /d
, /w
.
Por lo tanto, la expresión regular en su caso, "[//s0-9a-z]+,"
coincide con 1 o más /
, s
, dígitos y letras ASCII en minúsculas, y luego una sola "[//s0-9a-z]+,"
Puede usar clases de caracteres POSIX en su lugar, como [:space:]
(cualquier espacio en blanco) o [:blank:]
(espacios en blanco horizontales):
> gsub("[[:space:]0-9a-z]+,", "", vec)
[1] " Fast"
O, use una expresión regular de PCRE con /s
perl=TRUE
argumento perl=TRUE
:
> gsub("[//s0-9a-z]+,", "", vec, perl=TRUE)
[1] " Fast"
Para hacer coincidir todos los espacios en blanco de Unicode, agregue (*UCP)
verbo PCRE al inicio del patrón: gsub("(*UCP)[//s0-9a-z]+,", "", vec, perl=TRUE)
.
Intente una expresión regular diferente:
gsub("[[:blank:][:digit:][:lower:]]+,", "", vec)
#[1] " Fast"
O bien, para eliminar el espacio después de la coma,
gsub("[[:blank:][:digit:][:lower:]]+, ", "", vec)
#[1] "Fast"
Una solución tidyverse
sería utilizar str_replace
con su expresión regular original:
library(stringr)
str_replace(vec, "[//s0-9a-z]+,", "")