如何在 R 中使用 gsub 进行精确的字符串匹配?

How do I do an exact string match using gsub in R?

raw = c("MOUNTAIN VIEW","MOUNTAIN")
x = gsub("MOUNTAIN", "MOUNTAIN VIEW", raw, ignore.case = TRUE)

Current output: "MOUNTAIN VIEW VIEW" "MOUNTAIN VIEW"  
Desired output:  "MOUNTAIN VIEW" "MOUNTAIN VIEW"  

我只想将原始数据 MOUNTAIN 中的第二个条目替换为 MOUNTAIN VIEW。原始数据中的第一个条目已经正确。但是当我执行 gsub 时,它会将出现的 MOUNTAIN 替换为 MOUNTAIN VIEW。谁能帮我找到解决这个问题的方法?

我试过 \b 但它没有用,我明白为什么。还有什么我可以做的吗?

在这里使用 anchors 来匹配整个字符串:

sub('^MOUNTAIN$', 'MOUNTAIN VIEW', raw, ignore.case = TRUE)
# [1] "MOUNTAIN VIEW" "MOUNTAIN VIEW"

如果需要,您还可以使用捕获组并在替换调用中反向引用它:

sub('^(MOUNTAIN)$', '\1 VIEW', raw, ignore.case = TRUE)

使用 agrep -returns 向量索引,因此您可以使用 subscripts 轻松赋值:

raw[agrep("MOUNTAIN", raw)] <- "MOUNTAIN VIEW" 
raw
[1] "MOUNTAIN VIEW" "MOUNTAIN VIEW"