3

我正在尝试用空格替换向量中字符串元素的子字符串。以下是我们正在考虑的向量:

test <- c("PALMA DE MALLORCA", "THE RICH AND THE POOR", "A CAMEL IN THE DESERT", "SANTANDER SL", "LA")

lista <- c("EL", "LA", "ES", "DE", "Y", "DEL", "LOS", "S.L.", "S.A.", "S.C.", "LAS",
       "DEL", "THE", "OF", "AND", "BY", "S", "L", "A", "C", "SA", "SC", "SL")

然后,如果我们按mgsub原样应用该函数,我们将得到以下输出:

library(qdap)
mgsub(lista, "", test)
# [1] "PM MOR"   "RIH POOR" "M IN ERT" "NTER"     ""  

因此,我将列表更改为以下内容并重新执行:

lista <- paste("\\b", lista, "\\b", sep = "")
mgsub(lista, "", test)
# [1] "PALMA DE MALLORCA"     "THE RICH AND THE POOR" "A CAMEL IN THE DESERT"
# [4] "SANTANDER SL"          "LA"   

我无法让单词边界正则表达式为这个函数工作。

4

1 回答 1

2

根据multigsub {qdap}文件

mgsub(pattern, replacement = NULL, text.var, leadspace = FALSE, trailspace = FALSE, fixed = TRUE, trim = TRUE, ...)
... 合乎逻辑。如果, pattern 是要按原样匹配的字符串。覆盖所有冲突的参数。
fixed
TRUE

为确保您的搜索词向量被解析为正则表达式,您需要“手动”将fixed参数设置为FALSE.

另一个重要的注意事项:后面设置的单词边界.需要一个单词字符(或行尾)。在这种情况下使用(?!\w)子模式更安全。要在 R 正则表达式中使用环视,您需要使用类似 Perl 的正则表达式。因此,我建议使用这个(如果非单词字符只能出现在正则表达式的末尾):

lista <- paste("\\b", lista, "(?!\\w)", sep = "")

或(如果开头也可以有非单词字符):

lista <- paste("(?<!\\w)", lista, "(?!\\w)", sep = "")

接着

mgsub(lista, "", test, fixed=FALSE, perl=TRUE)
于 2015-10-29T13:38:15.070 回答