2017-07-19 82 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可以让我记住更多可读代码。

相关问题