代码之家  ›  专栏  ›  技术社区  ›  Pavel Shliaha

如何使用string_replacement()执行包含方括号的替换?

  •  0
  • Pavel Shliaha  · 技术社区  · 1 周前

    我有一个向量,它有两个元素:

    xx <- c("K[Phenylisocyanate (N-term)]SAPATGGVKKPHR", "A[Phenylisocyanate (N-term)]SAPATGGVKKPHR")
    

    我想将“[苯基异氰酸酯(N项)]”替换为“[苯基异氰酸酯_Propionyl(N项

    所以我想得到c(“K[苯基异氰酸酯_Propionyl(N项)]SAPATGGVKKPHR”,“A[苯基异氰酸酯(N项的)]SAPATGGVKKPHR”)。

    使用执行此替换

    str_replace (xx,  "K[Phenylisocyanate (N-term)]", "K[Phenylisocyanate_Propionyl (Nterm)]")
    

    导致非常出乎意料的行为:

    [1] “K[苯基异氰酸酯_Propionyl(N项)]苯基异氰酸酯(N-项)]SAPATGGVKKPHR”

    [2] “A[苯基异氰酸酯(N项)]SAPATGGVKK[苯基异氰酸酯_Propionyl(N项)]HR”

    你能解释一下我应该如何写这个替代品吗?为什么我会得到这个奇怪的结果?

    1 回复  |  直到 1 周前
        1
  •  1
  •   shaun_m    1 周前

    产生上述结果的原因是 [ ] 是正则表达式中的元字符,它们的意思是“匹配方括号内出现的任何字符”。

    要解决此问题,您可以使用 fixed() 函数来告诉R该模式不是正则表达式。

    str_replace(xx,  fixed("K[Phenylisocyanate (N-term)]"), "K[Phenylisocyanate_Propionyl (Nterm)]")