0

给定以下代码:

list = c("the", "at", "ok")
paragraph = "the cat ath the hat is ok"

如何从“段落”中删除列表中的所有单词?

我试着做:

gsub(list, '', paragraph)

但只删除了列表的第一项。我知道这不应该很复杂,但这仍然让我感到困惑。我也想避免使用 for 循环,但 apply 系列应该没问题。

4

1 回答 1

7

该模式"(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 "
于 2012-12-13T06:38:45.273 回答