test solo regulares regular que probar numeros mayores letras expresiones expresion especiales espacios espacio ejemplos consecutivos caracteres blanco alfanumerico regex r

regex - solo - Extrayendo números de vectores de cadenas



javascript regex test (9)

Aquí hay una alternativa a la primera solución de Arun, con una expresión regular similar a Perl:

as.numeric(gsub("[^//d]+", "", years, perl=TRUE))

Tengo una cuerda como esta:

years<-c("20 years old", "1 years old")

Me gustaría grep solo el número numérico de este vector. El resultado esperado es un vector:

c(20, 1)

¿Cómo voy a hacer esto?


Creo que la sustitución es una forma indirecta de llegar a la solución. Si quieres recuperar todos los números, te recomiendo gregexpr :

matches <- regmatches(years, gregexpr("[[:digit:]]+", years)) as.numeric(unlist(matches))

Si tiene varias coincidencias en una cadena, obtendrá todas. Si solo está interesado en la primera coincidencia, use regexpr lugar de gregexpr y puede omitir la unlist .


Después de la publicación de Gabor Grothendieck en la lista de correo r-help

years<-c("20 years old", "1 years old") library(gsubfn) pat <- "[-+.e0-9]*//d" sapply(years, function(x) strapply(x, pat, as.numeric)[[1]])


Extraiga los números de cualquier cadena en la posición inicial.

x <- gregexpr("^[0-9]+", years) # Numbers with any number of digits x2 <- as.numeric(unlist(regmatches(years, x)))

Extrae los números de cualquier cadena INDEPENDIENTE de la posición.

x <- gregexpr("[0-9]+", years) # Numbers with any number of digits x2 <- as.numeric(unlist(regmatches(years, x)))


O simplemente:

as.numeric(gsub("//D", "", years)) # [1] 20 1


Qué tal si

# pattern is by finding a set of numbers in the start and capturing them as.numeric(gsub("([0-9]+).*$", "//1", years))

o

# pattern is to just remove _years_old as.numeric(gsub(" years old", "", years))

o

# split by space, get the element in first index as.numeric(sapply(strsplit(years, " "), "[[", 1))


También puedes deshacerte de todas las letras:

as.numeric(gsub("[[:alpha:]]", "", years))

Sin embargo, esto es menos generalizable.


Una solución stringr :

library(stringr) years %>% str_match_all("[0-9]+") %>% unlist %>% as.numeric


Actualización Como extract_numeric está en desuso, podemos usar parse_number del paquete readr .

library(readr) parse_number(years)

Aquí hay otra opción con extract_numeric

library(tidyr) extract_numeric(years) #[1] 20 1