R grepl: condições de combinação
Sou novo em R e preciso verificar se string contém apenas dígitos .e símbolos de espaço. Minha versão do código é:
grepl("\\d+.", x)
Mas não funciona. Eu preciso do seguinte resultado:
str <- "0. 365"
str1 <- "S12"
grepl("\\d+.", str) #True
grepl("\\d+.", str1) #False
Como posso combinar minhas condições de forma greplcorreta?
Respostas
Experimente este regex .
str <- c("0. 365", "S12")
grepl("^[ \\.[:digit:]]*$", str)
#[1] TRUE FALSE
Você diz que deseja verificar "se a string contém apenas dígitos .e símbolos de espaço". Você não menciona em que ordem esses tipos de caracteres devem aparecer. Presumo que a ordem que procura é fixa: primeiro dígito, depois ponto e depois espaço (a julgar pelo facto de ter aceite a resposta de @Rui, que funciona para ordem fixa). Se, no entanto, a ordem for variável em vez de fixa, então esta regex funcionaria:
Dados:
str <- c("0. 365", ".0&0 ", "abc.12 .2", "000. ", "123", "ab.c")
Solução:
grepl("^(?=.*\\s)(?=.*\\d)(?=.*\\.)[\\s\\d\\.]+$", str, perl = T)
[1] TRUE FALSE FALSE TRUE FALSE FALSE
Isso funciona afirmando que (i) um caractere de espaço em branco existe, (ii) um dígito existe e (iii) um ponto existe, e permitindo que apenas os três caracteres apareçam entre o início ^e o fim da string $. (Para um caso semelhante, consulte Como combinar strings que contêm apenas um conjunto de caracteres em qualquer ordem e qualquer número? )