Extraer una determinada subcadena(dirección de correo electrónico)
regex substring (4)
Esos se parecen a lo que R podría llamar una "persona".
Hay una función
as.person()
que puede dividir la dirección de correo electrónico.
Por ejemplo
v1 <- c("Persons Name <[email protected]>","person 2 <[email protected]>")
unlist(as.person(v1)$email)
# [1] "[email protected]" "[email protected]"
Para obtener más información, consulte la página de ayuda
?person
.
Estoy tratando de extraer un cierto de una variable que se ve así:
v1 <- c("Persons Name <[email protected]>","person 2 <[email protected]>")
(esta variable tiene cientos de observaciones)
Finalmente quiero hacer una segunda variable que extraiga su correo electrónico para dar este resultado:
v2 <- c("[email protected]", "[email protected]")
¿Cómo haría esto?
¿Hay algún paquete que pueda usar?
¿O necesito hacer una función que incorpore
grep
y
substr
?
Puede buscar el patrón "cualquier cosa **, luego <, luego (cualquier cosa), luego>, luego cualquier cosa" y reemplazar ese patrón con la parte entre paréntesis, indicada por / 1 (y un / adicional para escapar).
sub(''.*<(.*)>.*'', ''//1'', v1)
# [1] "[email protected]" "[email protected]"
** "cualquier cosa" en realidad significa cualquier cosa menos saltos de línea
Puede buscar un patrón que se parezca al correo electrónico utilizando
regexpr
.
Si se encuentra una coincidencia, extraiga la parte relevante usando la
substring
.
El
regexpr
proporciona la posición inicial y la longitud del
regexpr
inds = regexpr(pattern = "<(.*@.*//..*)>", v1)
ifelse(inds > 1,
substring(v1, inds + 1, inds + attr(inds, "match.length") - 2),
NA)
#[1] "[email protected]" "[email protected]"
Una opción con
str_extract
de
stringr
library(stringr)
str_extract(v1, "(?<=//<)[^>]+")
#[1] "[email protected]" "[email protected]"