如何使用R来计算字符串中的CAPSLOCK

如何使用R来计算字符串中的CAPSLOCK,r,uppercase,capslock,R,Uppercase,Capslock,在src$Review中,每行用俄语填写文本。我想数一数每一排的卡普斯洛克。例如,在“我的苹果是绿色的”中,我不仅要计算大写字母的数量,还要计算CAPSLOCK的数量(没有“我的”,只有“绿色”)。因此,只有当至少有两个字符以大写形式出现时,它才起作用 现在,我的脚本中有以下代码: capscount <- str_count(src$Review, "[А-Я]") capscont您要查找的模式是“\\b[A-Z]{2,}\\b”。它将在两个或多个连续的大写字母上匹配,每边都有边界,

在src$Review中,每行用俄语填写文本。我想数一数每一排的卡普斯洛克。例如,在“我的苹果是绿色的”中,我不仅要计算大写字母的数量,还要计算CAPSLOCK的数量(没有“我的”,只有“绿色”)。因此,只有当至少有两个字符以大写形式出现时,它才起作用

现在,我的脚本中有以下代码:

capscount <- str_count(src$Review, "[А-Я]")

capscont您要查找的模式是
“\\b[A-Z]{2,}\\b”
。它将在两个或多个连续的大写字母上匹配,每边都有边界,
\\b
。这是整体结构,必要时用俄语字母表填写

#test string. A correct count should be 1 0 2
x <- c("My GREEN", "My Green", "MY GREEN")

library(stringr)
str_count(x, "\\b[A-Z]{2,}\\b")
#[1] 1 0 2

library(stringi)
stri_count(x, regex="\\b[A-Z]{2,}\\b")
#[1] 1 0 2

#base R
sapply(gregexpr("\\b[A-Z]{2,}\\b", x), function(x) length(c(x[x > 0])))
#[1] 1 0 2

将Pierre的正则表达式与
nchar
str\u extract\u all
一起使用。使用
simplify=TRUE
paste0
连接所有实例

library(stringr)

string <- c("My applie is GREEN and Her Majesty's apricot is ORANGE", "I have a LARGE sword", "My baby is sick")

nchar(
  paste0(
    str_extract_all(string = string, pattern = "\\b[A-Z]{2,}\\b", simplify = TRUE), 
    collapse = "")
  )
库(stringr)

string我维护的qdapRegex包中有一个正则表达式,它与@Hugh的正则表达式相同,但在我看来,在一个库中存储大量的公共正则表达式是很好的,我可以直接获取这些正则表达式qdapRegex使用stringi作为后端,因此如果您安装了qdapRegex,应该可以使用

在@Pierre Lafortune的字符串上:

x <- c("My GREEN", "My Green", "MY GREEN")

library(qdapRegex)
stringi::stri_count_regex(x, grab("@rm_caps"))

## [1] 1 0 2
x2 <- c("My applie is GREEN and Her Majesty's apricot is ORANGE", "I have a LARGE sword", "My baby is sick")
stringi::stri_count_regex(x2, grab("@rm_caps"))

## [1] 2 1 0
在@Hugh的字符串上:

x <- c("My GREEN", "My Green", "MY GREEN")

library(qdapRegex)
stringi::stri_count_regex(x, grab("@rm_caps"))

## [1] 1 0 2
x2 <- c("My applie is GREEN and Her Majesty's apricot is ORANGE", "I have a LARGE sword", "My baby is sick")
stringi::stri_count_regex(x2, grab("@rm_caps"))

## [1] 2 1 0
x2