R grepl:组合条件

R grepl: combine conditions

我是 R 的新手,我必须检查字符串是否仅包含数字、. 和 space 符号。 我的代码版本是:

grepl("\d+.", x)

但是没用。我需要以下结果:

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

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

如何正确组合 grepl 的条件?

试试这个 regex

str <- c("0. 365", "S12")
grepl("^[ \.[:digit:]]*$", str)
#[1]  TRUE FALSE

你说你想检查“如果字符串只包含数字、. 和 space 符号”。您没有提到 这些字符类型应该以何种顺序出现。我认为您要查找的顺序是固定的:第一个数字,然后是句点,然后是 space (根据您已经接受@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) 一个白色 space 字符存在,(ii) 一个数字存在,以及 (iii) 一个句点存在,并且只允许三个字符出现在字符串 ^ 和字符串结尾 $。 (有关类似案例,请参阅