我想使用正则表达式删除字符向量中具有精确模式的单词,但不知道如何

Ego*_*gor 0 regex r

我有这个向量

names <- c("wazzzap12waaazzzaaaaapffffm12323", "hell223231", "musssaaaa225")
Run Code Online (Sandbox Code Playgroud)

所以我想删除向量元素中至少包含三个“z”字母的数字的单词。

akr*_*run 5

我们可以grep与 一起使用invert = TRUE。将正则表达式指定为z重复 3 次或更多{}

grep("z{3,}", names, invert = TRUE, value = TRUE)
[1] "hell223231"   "musssaaaa225"
Run Code Online (Sandbox Code Playgroud)

或者使用str_subset来自stringr

library(stringr)
str_subset(names, "z{3,}", negate = TRUE)
[1] "hell223231"   "musssaaaa225"
Run Code Online (Sandbox Code Playgroud)

更新

如果我们只想从具有“z”重复的那些中删除非数字

i1 <- grep("z{3,}", names)
names[i1] <- gsub("\\D+", "", names[i1])
Run Code Online (Sandbox Code Playgroud)

-输出

> names
[1] "1212323"      "hell223231"   "musssaaaa225" 
Run Code Online (Sandbox Code Playgroud)