R grepl: объединить условия

Oct 18 2020

Я новичок в R, и мне нужно проверить, содержит ли строка только цифры .и символы пробела. Моя версия кода:

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

Но не работает. Мне нужен следующий результат:

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

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

Как greplправильно скомбинировать свои условия ?

Ответы

1 RuiBarradas Oct 18 2020 at 18:58

Попробуйте это регулярное выражение .

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

Вы говорите, что хотите проверить, «содержит ли строка только цифры .и символы пробела». Вы не указываете, в каком порядке должны появляться эти типы символов. Я полагаю, что порядок, который вы ищете, фиксирован: первая цифра, затем точка, затем пробел (судя по тому факту, что вы приняли ответ @Rui, который работает для фиксированного порядка). Если, однако, порядок является переменным, а не фиксированным, то это регулярное выражение будет работать:

Данные:

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

Решение:

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

Это работает, утверждая, что (i) существует символ пробела, (ii) существует цифра и (iii) существует точка, и позволяя только трем символам появляться между началом строки ^и концом строки $. (Для аналогичного случая см. Как сопоставить строки, содержащие только набор символов в любом порядке и любые числа? )