r regex substring

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]"