【问题标题】:R string containing only one type of character仅包含一种字符的 R 字符串
【发布时间】:2014-08-06 11:31:52
【问题描述】:

我想检查一个字符串是否只包含一种字符

例如

INPUT: 

str = "AAAAB"
char = "A"

OUTPUT:

str contains only char = FALSE

grepl(char,str) 的结果是 TRUE,但我希望它是 FALSE。

非常感谢

【问题讨论】:

  • 如果你的str"",你可能需要一些特殊的逻辑。例如,m0nhawk's solution 在这种情况下将输出 TRUE (!grepl("[^A]", "")),这可能是也可能不是您想要的。

标签: r stringr


【解决方案1】:

如果你想检查一个特定的字符(char):

str <- "AAAAB"
char = "A"
all(unlist(strsplit(str, "")) == char)
#[1] FALSE

str <- "AAAA"
char = "A"
all(unlist(strsplit(str, "")) == char)
#[1] TRUE

或者,如果要检查字符串是否只包含一个唯一字符(任意一个):

str <- "AAAAB"
length(unique(unlist(strsplit(str, "")))) == 1
#[1] FALSE

str = "AAAA"
length(unique(unlist(strsplit(str, "")))) == 1
#[1] TRUE

【讨论】:

    【解决方案2】:

    您需要对正则表达式使用not 运算符,在您的情况下,这将是:

    > !grepl("[^A]", "AAA")
    [1] TRUE
    > !grepl("[^A]", "AAAB")
    [1] FALSE
    

    带变量:

    grepl(paste0("[^", char, "]"), srt)
    

    【讨论】:

      【解决方案3】:

      另一种选择是使用charToRaw 并检查它是否是唯一的:

      xx <- "AAAAB"
      length(unique(charToRaw(xx))) ==1
      [1] FALSE
      

      【讨论】:

      • 这不会将计数 char = "A" 作为输入
      【解决方案4】:

      您可以使用“stringi”包中的stri_count,如下所示:

      library(stringi)
      stri_count_fixed(str, char) == nchar(str)
      # [1] FALSE
      

      【讨论】:

        【解决方案5】:

        使用gregexpr

        char = "A"
        
        str = "AAAA"
        length(unlist(gregexpr(char, str))) == nchar(str)
        ## [1] TRUE
        
        str = "ABAAA"
        length(unlist(gregexpr(char, str))) == nchar(str)
        ## [1] FALSE
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-07
          • 1970-01-01
          • 1970-01-01
          • 2011-03-18
          • 2019-05-25
          • 2021-12-10
          相关资源
          最近更新 更多