代码之家  ›  专栏  ›  技术社区  ›  pyeR_biz

使用R中的gsub部分替换字符串中的regex模式?

  •  2
  • pyeR_biz  · 技术社区  · 8 年前

    我必须在同样包含双引号字符的字符串中替换“用作度量单位(英寸)”。

    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找到模式并获取索引,然而,这似乎不合理,因为向量中的单个字符串可以同时具有“作为计量单位和作为引号”。 grep('\\d\"',uuuu,value = FALSE)

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

    1 回复  |  直到 8 年前
        1
  •  2
  •   Wiktor Stribiżew    8 年前

    您可以使用 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"