我有一個字符串檢查,如果在字符串中的字符是大寫
x <- "lowerUpper"
,並希望做決定是否和這個字符串中的字符是一個大寫字母。
我可以使用toupper(x) == x
,它告訴我,如果所有字符都是大寫的,但是如何檢查是否只有一些(和哪些)是?
我有一個字符串檢查,如果在字符串中的字符是大寫
x <- "lowerUpper"
,並希望做決定是否和這個字符串中的字符是一個大寫字母。
我可以使用toupper(x) == x
,它告訴我,如果所有字符都是大寫的,但是如何檢查是否只有一些(和哪些)是?
一種選擇是gregexpr
尋找到字符爲大寫
unlist(gregexpr("[A-Z]", x))
#[1] 6
> x <- "lowerUpper"
> sapply(strsplit(x, ''), function(a) which(a %in% LETTERS)[1])
[1] 6
或
> library(stringi)
> stri_locate_first_regex(x, "[A-Z]")
另一種方法是檢查每個字母的位置:
which(toupper(strsplit(x,split = "")[[1]])==strsplit(x,split = "")[[1]])
#[1] 6
您也可以使用符號\U
檢查大寫:
unlist(gregexpr("\\U", "lowerUpper"))
#[1] 6
也許%使用%的清潔器代碼版本
unlist(strsplit("lowerUpper",'')) %in% LETTERS
這裏的優點是指示在每個字母位置的邏輯矢量的返回串。此解決方案也適用於多個大寫字母,而grep選項僅返回第一個匹配項。最後,使用LETTERS可以讓我記住更多可讀代碼。
完美!謝謝! – smoff