【问题标题】:How to count CAPSLOCK in string using R如何使用 R 计算字符串中的 CAPSLOCK
【发布时间】:2015-10-18 12:06:35
【问题描述】:

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

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

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

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

提前谢谢你。

【问题讨论】:

    标签: r uppercase capslock


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        我维护的 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
        

        【讨论】:

          猜你喜欢
          • 2021-09-18
          • 2016-08-05
          • 1970-01-01
          • 2022-12-21
          • 2014-10-21
          • 2017-07-09
          • 2018-11-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多