检查字符串中的字符是否为大写

check if a character within a string is uppercase

我有一个字符串

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

也许是使用 %in%

的更清晰的代码版本
unlist(strsplit("lowerUpper",'')) %in% LETTERS

这里的一个优点是逻辑向量的 return 表示字符串中每个字母的位置。此解决方案也适用于多个大写字母,而 grep 选项 return 仅适用于第一个匹配项。最后,在我看来,使用 LETTERS 可以使代码更具可读性。