【发布时间】:2017-12-24 10:14:03
【问题描述】:
我有一个字符串
x <- "lowerUpper"
并且想要确定这个字符串中的哪个字符是大写字母。
我可以使用toupper(x) == x,它告诉我是否所有字符都是大写的,但我如何检查是否只有一些(以及哪些)是?
【问题讨论】:
我有一个字符串
x <- "lowerUpper"
并且想要确定这个字符串中的哪个字符是大写字母。
我可以使用toupper(x) == x,它告诉我是否所有字符都是大写的,但我如何检查是否只有一些(以及哪些)是?
【问题讨论】:
一个选项是gregexpr 查找字符为大写的位置
unlist(gregexpr("[A-Z]", x))
#[1] 6
【讨论】:
您也可以使用符号\U 来检查是否为大写:
unlist(gregexpr("\\U", "lowerUpper"))
#[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
【讨论】:
也许是使用 %in% 的更简洁的代码版本
unlist(strsplit("lowerUpper",'')) %in% LETTERS
这里的一个优点是返回指示字符串中每个字母位置的逻辑向量。此解决方案也适用于多个大写字母,而 grep 选项仅返回第一个匹配项。最后,在我看来,使用 LETTERS 可以使代码更具可读性。
【讨论】: