我正在R Studio 1.2.1335中使用R 3.6.1。
我正在尝试编写一个函数来计算字符串中大写字母的数量。我一直在使用grepl中的不同正则表达式语句,并提出了奇怪的结果。
我决定使用strsplit将字符串拆分为单独的字符,然后套用在那些字符上,以检查它们是否使用grepl和[:upper:]大写,如下所示:
s <- 'Testing'
strsplit(s, character(0))[[1]]
[[1]“ T”“ e”“ s”“ t”“ i”“ n”“ g”
unname(sapply(strsplit(s, character(0))[[1]], function(x) grepl(x, '[:upper:]')))
[[1] FALSE TRUE FALSE FALSE FALSE FALSE FALSE
此输出说明'T'字符不是大写,而'e'字符是。
当我改用正则表达式'A-Z'时:
sapply(strsplit(s, character(0))[[1]], function(x) grepl(x, '[A-Z]'))
我得到所有项目的“ FALSE”输出(而“ T”字符应为“ TRUE”。
当我为每个字母单独尝试正则表达式时,我得到的结果与上述输出一致:
grepl('T', '[:upper:]')
grepl('e', '[:upper:]')
这将为“ T”返回FALSE,为“ e”返回TRUE。
我对自己在做错的事情感到非常困惑。我仍将头放在正则表达式语句周围,我们将不胜感激!
我们需要[[:upper:]]
grepl('[[:upper:]]', strsplit(s, character(0))[[1]])
#[1] TRUE FALSE FALSE FALSE FALSE FALSE FALSE