【发布时间】:2016-01-29 10:26:20
【问题描述】:
我正在尝试用空格替换向量中字符串元素的子字符串。以下是我们正在考虑的向量:
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"
我无法让单词边界正则表达式为此函数工作。
【问题讨论】:
-
首先,尝试
lista <- paste("(?<!\\w)", lista, "(?!\\w)", sep = ""),然后尝试mgsub(lista, "", test, perl=TRUE)。单词边界不适用于lista中的所有项目,那些以.结尾的项目。 -
@stribizhev 尝试过,但仍然没有从模式列表中提取 test 中的元素
-
@stribizhev 我删除了所有标点符号,但仍然无法正常工作。有什么想法吗?
-
默认的
fixed = TRUE可能是导致问题的原因。使用fixed = FALSE。如:mgsub(lista, "", test, fixed=FALSE); ##[1] "PALMA MALLORCA" "RICH POOR" "CAMEL IN DESERT" "SANTANDER" "" -
@TylerRinker 这正是问题所在,我之前并不完全理解这个论点,我将其设置为 TRUE。谢谢
标签: regex r qdap character-replacement