在 R 中使用 gsub 部分替换字符串中的正则表达式模式?

Partially replace regex pattern in string using gsub in R?

我必须替换字符串中用作度量单位(英寸)的 ",这些字符串也包含双引号中的字符。

uuuu<- c('BELT, "V" 5L610, LONG 4.5" WIDE 7.5", TYPE "K"')

我数据中的矢量有 70k+ 行,我只需要担心数字后面的 "。 我想要的结果是 - BELT, "V" 5L610, LONG 4.5IN WIDE 7.5IN, TYPE "K"

我试过 gsub('\d\"',"\dIN",uuuu) 但你知道那不会给我结果正确的结果:"BELT, \"V\" 5L610, LONG 4.dIN WIDE 7.dIN, TYPE \"K\"

然后我尝试使用 grep 来查找模式并获取索引,但是,这似乎并不合理,因为向量中的单个字符串可能同时具有 " 作为 UOM 和引号。grep('\d\"',uuuu,value = FALSE)

如何保留图案中的数字?在 gsub 中应该可以吗?

您可以对替换模式中的组值使用 capturing group (a pair of unescaped parentheses) around the part of the pattern you need to keep after replacement and a backreference

gsub('(\d)"', "\1IN", uuuu)
      ^   ^     ^^^

参见regex demo

图案详情

  • (\d) - 捕获组 1(其值可以通过替换模式中的 </code> 反向引用来引用):任何数字</li> <li><code>" - 双引号。

R demo:

uuuu<- c('BELT, "V" 5L610, LONG 4.5" WIDE 7.5", TYPE "K"')
cat(gsub('(\d)"', "\1IN", uuuu))
## => BELT, "V" 5L610, LONG 4.5IN WIDE 7.5IN, TYPE "K"