R字符串只包含一种字符

时间:2014-08-06 11:31:53

标签: r stringr

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

例如

INPUT: 

str = "AAAAB"
char = "A"

OUTPUT:

str contains only char = FALSE

使用grepl(char,str),结果为TRUE,但我希望它为FALSE。

非常感谢

5 个答案:

答案 0 :(得分:5)

如果您想检查特定字符(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

答案 1 :(得分:4)

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

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

使用变量:

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

答案 2 :(得分:4)

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

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

答案 3 :(得分:3)

使用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

答案 4 :(得分:3)

您可以使用&#34; stringi&#34;中的stri_count。包,像这样:

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