如何使用 R、stringr 等动态删除或替换字符串中不确定数字的单词?

How to dynamically remove or replace words with uncertain numbers in a string using R, stringr etc?

假设我有数据:

s1 <-'aaa'
s2 <- 'bbb'
s <- 'aaa bbb poefaaapeka 111bbbcde'

s1和s2是两个词。我想从 s 中删除或替换。所以结果应该是:

'poefaaapeka 111bbbcde'

请注意,我只删除 aaa 是一个单词。如果换句话说,我需要保留它。在我的数据中,我不确定每次有多少个单词以及单词是什么。所以我不能使用 pattern='aaa|bbb' 这样的操作。另外,我必须把这些词一起去掉,所以模式应该是这样的:

s1|s2|s3...

这样我就可以删除所有不断变化的单词。

我们可以尝试构建一个正则表达式交替,它将同时针对 s1s2 项进行删除:

s1 <-'aaa'
s2 <- 'bbb'
regex <- paste0("\b(?:", s1, "|", s2, ")\b\s*")
s <- 'aaa bbb poefaaapeka 111bbbcde'
output <- sub("\s*$", "", gsub(regex, "", s))

s
output

[1] "aaa bbb poefaaapeka 111bbbcde"
[1] "poefaaapeka 111bbbcde"

此处使用的正则表达式模式是 \b(?:aaa|bbb)\b\s*,请注意,trim 在 aaabbb 项的右侧还有任意数量的空格.如果输入中的第一项是 aaabbb,则需要额外调用 sub。跟我们不能trim两边空格有关(怕连词),所以我们武断的选择只在右边做。