R:具有fixed = T的完全字符串的gsub

Ale*_*tov 1 regex r gsub

我想要gsub完整的字符串 - 我知道我需要使用^$.问题是我在字符串中有特殊字符(可能是[,或者.),所以我需要使用fixed=T.这会覆盖^$.任何解决方案都很受欢 需要将1st,2nd元素替换exact_orig为1st,2nd元素,exact_change但仅限于从头到尾匹配完整字符串.

exact_orig = c("oz","32 oz")
exact_change = c("20 oz","32 ct")

gsub_FixedTrue <- function(i) {
  for(k in seq_along(exact_orig)) i = gsub(exact_orig[k],exact_change[k],i,fixed=TRUE)
  return(i)
}
Run Code Online (Sandbox Code Playgroud)

测试用例:

print(gsub_FixedTrue("32 oz")) #gives me "32 20 oz" - wrong! Must be "32 ct"
print(gsub_FixedTrue("oz oz")) # gives me "20 oz 20 oz" - wrong! Must remain as "oz oz"
Run Code Online (Sandbox Code Playgroud)

我读了一个有点类似的线程,但无法使它适用于完整的字符串(grep在字符串的开头,固定= T在R?)

MrF*_*ick 6

如果你想完全匹配完整的字符串,我不认为你真的想在这种情况下使用正则表达式.这个match()功能怎么样?

fixedTrue<-function(x) {
    m <- match(x, exact_orig)
    x[!is.na(m)] <- exact_change[m[!is.na(m)]]
    x
}

fixedTrue(c("32 oz","oz oz"))
# [1] "32 ct" "oz oz"
Run Code Online (Sandbox Code Playgroud)