如何获取在特定位置没有字母的单词子集?

问题描述 投票:0回答:1

我很难理解这个问题,但我感觉答案使用了

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

有什么想法吗?

r stringr
1个回答
0
投票

一种选择是使用正则表达式方法。给定否定词

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()
中的复杂字符串操作正在生成正则表达式替换。我们只需从
.....
开始,然后添加否定输入单词中的一个字母。

© www.soinside.com 2019 - 2024. All rights reserved.