给出以下代码:
list = c("the", "at", "ok")
paragraph = "the cat ath the hat is ok"
如何从'paragraph'中删除列表中的所有单词?
我尝试过:
gsub(list, '', paragraph)
但只删除了第一项清单。我知道这不应该是复杂的,但这仍然让我感到困惑。另外我想避免使用for循环,但apply系列应该没问题。
答案 0 :(得分:6)
模式"(the|at|ok)"
将匹配列表中任何字符串的出现次数。
但听起来,你想要匹配那些实际的单词而不是它们所属的单词(即匹配“the”但不是“then”,“at”而不是“rattle”等)。如果在这种情况下,您可以使用模式"\\b(the|at|ok)\\b"
(其中"\\b"
是在字边界处匹配的模式)。
您可以使用paste0()
从匹配单词的任意向量构建所需的模式:
list <- c("the", "at", "ok")
paragraph <- "the cat ath the hat is ok"
## Construct the regular expression
pat <- paste0("\\b(", paste0(list, collapse="|"), ")\\b")
pat
# [1] "\\b(the|at|ok)\\b"
## Use it
gsub(pat, "", paragraph)
# [1] " cat ath hat is "