【问题标题】:How to find words in a string that have consecutive letters in R language如何在R语言中查找具有连续字母的字符串中的单词
【发布时间】:2022-01-09 17:56:39
【问题描述】:

有一个问题我不知道如何解决。

您需要编写一个函数,从包含重复字母的字符串中返回所有单词以及它们在一个单词中的最大重复次数。

从视觉上看,这个阶段可以通过以下示例进行查看: 处理后的"hello good home aboba"应该是hello good,给定字符串中一个字符的最大重复次数=2

我写的代码试图找到重复的字符,并基于此,从一个单独的数组中提取单词,但有些东西不起作用。帮助解决问题。

library(tidyverse)
library(stringr)   

text = 'tessst gfvdsvs bbbddsa daxz'
text = strsplit(text, ' ')
text

new = c()
new_2 = c()

for (i in text){
  
  new = str_extract_all(i, '([[:alpha:]])\\1+')
  if (new != character(0)){
    new_2 = c(new_2, i)
  }
}
new
new_2

输出:

Error in if (new != character(0)) { : argument is of length zero
> new
[[1]]
[1] "sss"

[[2]]
character(0)

[[3]]
[1] "bbb" "dd" 

[[4]]
character(0)

> new_2
NULL

【问题讨论】:

    标签: r regex string


    【解决方案1】:

    你可以使用

    new <- unlist(str_extract_all(text, "\\p{L}*(\\p{L})\\1+\\p{L}*"))
    i <- max(nchar( unlist(str_extract_all(new, "(.)\\1+")) ))
    

    使用str_extract_all(text, "\\p{L}*(\\p{L})\\1+\\p{L}*"),您将提取包含至少两个连续相同字母的所有单词,使用max(nchar( unlist(str_extract_all(new, "(.)\\1+")) )),您将获得最长的重复字母块。

    R demo online

    library(stringr)
    text <- 'tessst gfvdsvs bbbddsa daxz'
    new <- unlist(str_extract_all(text, "\\p{L}*(\\p{L})\\1+\\p{L}*"))
    # => [1] "tessst"  "bbbddsa"
    i <- max(nchar( unlist(str_extract_all(new, "(.)\\1+")) ))
    # => [1] 3
    

    this regex demo正则表达式详细信息

    • \p{L}* - 零个或多个字母
    • (\p{L}) - 第 1 组捕获的一封信
    • \1+ - 一个或多个重复捕获的字母
    • \p{L}* - 零个或多个字母

    【讨论】:

      【解决方案2】:
      text = "hello good home aboba"
      
      paste0(
        grep("(.)\\1{1,}", 
             unlist(strsplit(text, " ")), 
             value = TRUE),
        collapse = " ")
      
      [1] "hello good"
      

      【讨论】:

      • 请为正则表达式添加解释。
      猜你喜欢
      • 1970-01-01
      • 2020-03-20
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 2018-11-20
      • 1970-01-01
      • 1970-01-01
      • 2019-08-14
      相关资源
      最近更新 更多