2017-07-19 83 views
1

我有一個字符串檢查,如果在字符串中的字符是大寫

x <- "lowerUpper" 

,並希望做決定是否和這個字符串中的字符是一個大寫字母。

我可以使用toupper(x) == x,它告訴我,如果所有字符都是大寫的,但是如何檢查是否只有一些(和哪些)是?

回答

2

一種選擇是gregexpr尋找到字符爲大寫

unlist(gregexpr("[A-Z]", x)) 
#[1] 6 
+1

完美!謝謝! – smoff

1
> x <- "lowerUpper" 
> sapply(strsplit(x, ''), function(a) which(a %in% LETTERS)[1]) 
[1] 6 

> library(stringi) 
> stri_locate_first_regex(x, "[A-Z]") 
1

另一種方法是檢查每個字母的位置:

which(toupper(strsplit(x,split = "")[[1]])==strsplit(x,split = "")[[1]]) 
#[1] 6 
2

您也可以使用符號\U檢查大寫:

unlist(gregexpr("\\U", "lowerUpper")) 
#[1] 6 
1

也許%使用%的清潔器代碼版本

unlist(strsplit("lowerUpper",'')) %in% LETTERS 

這裏的優點是指示在每個字母位置的邏輯矢量的返回串。此解決方案也適用於多個大寫字母,而grep選項僅返回第一個匹配項。最後,使用LETTERS可以讓我記住更多可讀代碼。

相關問題