我很难理解这个问题,但我感觉答案使用了
stringr::str_subset
。
这是我要实现的目标的示例:
word_list <- c("amber", "flora", "glide", "quake", "slant")
word_neg <- "aside"
word_list_pruned <- some_function(word_list, word_neg)
> word_list_pruned
> c("flora", "slant")
我想要获取单词列表
word_list
和一个单词 word_neg
(此处为“旁边”),并且我想删除 word_list
中具有匹配/相同字母的所有单词位置如word_neg
。
有什么想法吗?
一种选择是使用正则表达式方法。给定否定词
aside
,我们可以构建以下正则表达式替换:
^(?:a....|.s...|..i..|....d.|....e)$
任何不匹配此替换的单词都应保留为匹配项。
word_list <- c("amber", "flora", "glide", "quake", "slant")
word_neg <- "aside"
patterns <- sapply(seq_along(1:5), function(x) {
paste0(strrep(".", x - 1), substr(word_neg, x, x), strrep(".", nchar(word_neg) - x))
})
pattern <- paste0("^(?:", paste(patterns, collapse="|"), ")$")
word_list_pruned <- word_list[!grepl(pattern, word_list)]
word_list_pruned
[1] "flora" "slant"
调用
sapply()
中的复杂字符串操作正在生成正则表达式替换。我们只需从 .....
开始,然后添加否定输入单词中的一个字母。