R grepl: condiciones de combinación

Oct 18 2020

Soy nuevo en R, y tengo que verificar si la cadena contiene solo dígitos .y símbolos de espacio. Mi versión de código es:

grepl("\\d+.", x)

Pero no funciona. Necesito el siguiente resultado:

str <- "0. 365" 
str1 <- "S12"

grepl("\\d+.", str) #True
grepl("\\d+.", str1) #False

¿Cómo puedo combinar mis condiciones greplcorrectamente?

Respuestas

1 RuiBarradas Oct 18 2020 at 18:58

Prueba esta expresión regular .

str <- c("0. 365", "S12")
grepl("^[ \\.[:digit:]]*$", str)
#[1]  TRUE FALSE
2 ChrisRuehlemann Oct 19 2020 at 04:06

Dice que desea comprobar "si la cadena contiene sólo dígitos .y símbolos de espacio". No menciona en qué orden deben aparecer estos tipos de caracteres. Supongo que el orden que está buscando es fijo: primer dígito, luego punto, luego espacio (a juzgar por el hecho de que ha aceptado la respuesta de @ Rui, que funciona para un orden fijo). Sin embargo, si el orden es variable en lugar de fijo, entonces esta expresión regular funcionaría:

Datos:

str <- c("0. 365", ".0&0 ", "abc.12 .2", "000. ", "123", "ab.c")

Solución:

grepl("^(?=.*\\s)(?=.*\\d)(?=.*\\.)[\\s\\d\\.]+$", str, perl = T)
[1]  TRUE FALSE FALSE  TRUE FALSE FALSE

Esto funciona afirmando que (i) existe un carácter de espacio en blanco, (ii) existe un dígito y (iii) existe un punto, y permitiendo que solo aparezcan los tres caracteres entre el inicio ^y el final de la cadena $. (Para un caso similar, consulte ¿Cómo hacer coincidir cadenas que solo contienen un juego de caracteres en cualquier orden y cualquier número? )