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

How to count CAPSLOCK in string using R

src$Review 中,每一行都用俄语填充。我想计算每行中的 CAPSLOCK。例如,在 "My apple is GREEN" 中,我不仅要计算大写字母的数量,还要计算 CAPSLOCK 的数量(没有 "My",只有 "GREEN")。因此,它仅在至少两个字符以大写形式显示时才有效。

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

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

只统计大写字母的总数。我只需要 CAPSLOCK 中的字符总数,这意味着只有在一个单词中至少显示 2 个后续字母(例如 "GREEN" 中的 "GR")时才会计算这些字符。

提前致谢。

您要找的模式是"\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

更新

如果您想要字符数:

sapply(str_match_all(x, "\b[A-Z]{2,}\b"), nchar)

将 Pierre 的正则表达式与 ncharstr_extract_all 结合使用。使用 simplify = TRUEpaste0 连接所有实例。

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 = "")
  )

我维护的 qdapRegex 包有一个正则表达式,它与@Hugh 的正则表达式相同,但 IMO 很高兴将许多常见的正则表达式存储在一个库中我只能抓住。 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

让我们看看正则表达式:

grab("@rm_caps")

## "(\b[A-Z]{2,}\b)"

在@Hugh 的字符串上:

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