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

时间:2018-01-20 20:31:54

标签: r regex gsub

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

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

我的数据中的向量有70k +行,我只需要担心&#34;在数字之后。 我想要的结果是 - 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来找到模式并得到索引,然而,这似乎并不合理,因为向量中的单个字符串可能同时具有&#34;作为UOM和引用。 grep('\\d\"',uuuu,value = FALSE)

如何保留模式中的数字?它应该可以在gsub?

1 个答案:

答案 0 :(得分:1)

您可以在替换后需要保留的模式部分周围使用capturing group(一对非转义括号),并在替换模式中使用backreference组值:

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

请参阅regex demo

模式详情

  • (\d) - 捕获第1组(其值可以使用替换模式中的\1反向引用引用):任何数字
  • " - 双引号。

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"