【问题标题】:Find words with at most two vowels查找最多包含两个元音的单词
【发布时间】:2022-01-15 19:08:02
【问题描述】:

我做了一个功能来搜索有两个元音在一起的单词。该函数将元音一起提供给我(例如:ee, ou),但我需要完整的单词(tree,four)。

lt <- c("tree", "four", "hello", "play")

vowel <- function(x) {  
  a<- regexpr(pattern = "[aeiou]{2}", x) 
    regmatches(x, a)
}

vowel(lt)

# [1] "ee" "ou"

提前谢谢你

【问题讨论】:

  • 只是出于好奇,您是否想做一个单词相似度?
  • 不,我正在搜索不同的模式,然后将其应用于单核苷酸重复序列 (SNP)。谢谢。

标签: r regex


【解决方案1】:

我们可以简单地使用grepl,我认为这对用户更友好。

vowel <- function(x) 
   
 {  
   a<- grepl("[aeiou]{2}", x) 
   x[a]
 }
 vowel(lt)
[1] "tree" "four"

【讨论】:

    【解决方案2】:

    另一种方法是替换

    [aeiou]{2}
    

    \w*[aeiou]{2}\w*
    

    在单词中包含双元音前后的字母。

    【讨论】:

    • 不,它匹配包含两个后续元音的任意长度的单词。 \w* 匹配任何字母字符零次或多次。检查regex101.com/r/cpEBth/1
    • 是的,你当然完全正确。我不知道是什么导致我一时失明,让我看到 \\b 那里有 \\w ... 为评论道歉
    【解决方案3】:

    这是stringr的解决方案:

    library(stringr)
    
    lt[str_count(lt, '[^aeiou]') ==2]
    
    [1] "tree" "four"
    

    【讨论】:

      【解决方案4】:

      如果没有匹配,regexpr 返回-1。因此,如果我们转换为逻辑,索引本身可以用于子集,而不是使用regmatches

      lt[regexpr("[aeiou]{2}", lt) >0]
      [1] "tree" "four"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-01
        • 1970-01-01
        • 2015-05-25
        • 1970-01-01
        • 1970-01-01
        • 2016-05-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多