逻辑测试,如果字符串恰好是2个或更多空格

时间:2014-03-03 15:53:59

标签: regex r

我希望能够测试一个字符串:

  1. 由2个或更多字符组成
  2. 并且所有字符都是空格
  3. 所以我们说我们有:

    x <- c("   ", "   p", "\\s\\s", "\\s", " ", "d", "  ", "          ", ": ")
    

    我希望结果如下:

    TRUE FALSE TRUE FALSE FALSE FALSE TRUE TRUE FALSE
    

    我开始使用以下内容:

    log_test <- gregexpr(":", gsub("\\s", ":", x))
    

    然后意识到这变得令人费解,(减去空间)导致容易出错的反应。例如,如果我沿着这条路走下去,那么最后一个元素将成为TRUE,即使它只有一个空格,因为它已经包含一个冒号。

    请注意R具有特定的正则表达式规则,要正确回答这一点,很可能需要了解R语言。

2 个答案:

答案 0 :(得分:5)

另一种选择:

grepl('^( |\\\\s){2,}$', x)
#[1]  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE  TRUE FALSE

答案 1 :(得分:2)

试一试?

> x2 <- gsub('\\\\s',' ',x)
> grepl('[[:blank:]]{2,}',x2) & !grepl('[[:alnum:][:punct:]]',x2)
[1]  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE  TRUE FALSE

您还可以使用[:graph:]来捕获字符和标点符号:

> x2 <- gsub('\\\\s',' ',x)
> grepl('[[:blank:]]{2,}',x2) & !grepl('[[:graph:]]',x2)
[1]  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE  TRUE FALSE