【问题标题】:Partially replace regex pattern in string using gsub in R?使用 R 中的 gsub 部分替换字符串中的正则表达式模式?
【发布时间】:2018-01-20 20:31:53
【问题描述】:

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

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中应该可以吗?

【问题讨论】:

  • 可能是gsub('(\\d)"', "\\1IN", uuuu)?
  • @WiktorStribiżew 谢谢,我以前在正则表达式中遇到过 1,2。但是我无法找到可以了解它们到底是什么的参考资料?你能分享一个参考吗?如果你愿意,我会接受如果发布的解决方案。
  • 这个website是我的最爱之一
  • @Poppinyoshi 请参阅下面的答案。

标签: r regex gsub


【解决方案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"

【讨论】:

    猜你喜欢
    • 2015-11-30
    • 2020-02-20
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多