R grepl: condições de combinação

Oct 18 2020

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

1 RuiBarradas Oct 18 2020 at 18:58

Experimente este regex .

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

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? )