如何用正则表达式保留R字符向量中含至少3个z元素的数字内容
R语言字符向量正则处理方案
你可以直接使用基础R的向量化判断+正则替换实现需求,完整实现代码如下:
# 原字符向量 names <- c("wazzzap12waaazzzaaaaapffffm12323", "hell223231", "musssaaaa225") # 核心处理逻辑 # 若匹配连续3个及以上z,仅保留数字,否则保留原内容 result <- ifelse( grepl(pattern = "z{3,}", x = names), gsub(pattern = "\\D", replacement = "", x = names), names )
规则调整说明
如果你的需求是只要总共有3个及以上z(不需要连续),只需要修改grepl的匹配模式即可:
grepl(pattern = "(.*z.*){3,}", x = names)
输出结果
运行上述代码后输出如下:
print(result) # [1] "1212323" "hell223231" "musssaaaa225"
可选:tidyverse生态实现
如果你常用tidyverse体系,可以用stringr包实现相同逻辑:
library(stringr) result <- ifelse( str_detect(string = names, pattern = "z{3,}"), str_replace_all(string = names, pattern = "\\D", replacement = ""), names )
内容的提问来源于stack exchange,提问作者Egor
相关产品推荐
相关产品推荐

