Regex [[:upper:]]正在检测小写字母,但不检测大写字母

问题描述 投票:0回答:1

我正在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。

我对自己在做错的事情感到非常困惑。我仍将头放在正则表达式语句周围,我们将不胜感激!

r regex rstudio grepl
1个回答
0
投票

我们需要[[:upper:]]

grepl('[[:upper:]]', strsplit(s, character(0))[[1]])
#[1]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
© www.soinside.com 2019 - 2024. All rights reserved.