gsub段落中的单词列表

时间:2012-12-13 06:31:45

标签: regex r

给出以下代码:

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

如何从'paragraph'中删除列表中的所有单词?

我尝试过:

gsub(list, '', paragraph)

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

1 个答案:

答案 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 "