You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用R语言的str_detect统计含至少两个指定字母的单词?

问题描述

给定R语言单词列表:

fruit <- c("apple", "banana", "pear", "pineapple", "papaya")

需统计其中**包含至少两个字母"p"**的单词数量(字母无需相邻,连续或间隔任意字符都符合要求),预期结果为3(对应apple、pineapple、papaya)。

尝试代码:

str_detect(fruit, "p[abcdefghijklmmoqrstuvwxyz]p")

但该代码无法匹配apple和pineapple,求覆盖所有符合条件单词的解决方案。

解决方案

方法1:统计字符出现次数(最直观)

用stringr包的str_count函数统计每个单词中"p"的出现次数,再筛选次数≥2的单词并计数:

library(stringr)

fruit <- c("apple", "banana", "pear", "pineapple", "papaya")
# 统计每个单词中"p"的数量
p_count <- str_count(fruit, fixed("p"))
# 统计符合条件的单词总数
sum(p_count >= 2)

运行结果为3,完全符合预期。

方法2:正则表达式匹配

使用正向预查正则,匹配包含至少两个"p"的字符串:

library(stringr)

fruit <- c("apple", "banana", "pear", "pineapple", "papaya")
# 匹配包含至少两个"p"的单词
matches <- str_detect(fruit, "(?=.*p.*p)")
# 统计匹配成功的数量
sum(matches)

同样得到结果3。

原代码问题分析

你写的正则p[abcdefghijklmmoqrstuvwxyz]p存在两个关键问题:

  • 强制要求两个"p"之间必须有一个非"p"的字符,无法匹配连续的"p"(比如apple里的pp);
  • 正则里重复写了字母m,且遗漏了字母n,进一步缩小了匹配范围。

内容的提问来源于stack exchange,提问作者Ditto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 13:01:03