【问题标题】:Problems replacing a substring替换子字符串的问题
【发布时间】:2019-05-26 13:59:58
【问题描述】:

让字符串s

structure(",SELECTCOLUMNS(FILTER(CG_PART,((CG_PART[0NIVEL4] = \"4.03.01.003\"))  && CG_PART[isEstorno] = 0 ) ,\"Data\",CG_PART[DATA], \"D/C\", CG_PART[D_C],\"Nivel1\", \"(-) Custo de serviços\", \"Nivel2\", \"Custo de Frete de Serviços PJ\",\"Nivel3\", [0NIVEL4],\"Valor\", IF(CG_PART[D_C] = \"D\",-CG_PART[VALORR],CG_PART[VALORR]), \"Ordem Apresentacao\", 7, \"isSub\", 0)")

我想替换内容:

\"Nivel1\", \"(-) Custo de serviços\", \"Nivel2\", \"Custo de Frete de
Serviços PJ\",\"Nivel3\", [0NIVEL4],\"Valor\"

到这个:

\"Nivel1\", \"(=) RECEITA OPERACIONAL LÍQUIDA\",\"Nivel2\", \"(=) RECEITA OPERACIONAL 
LÍQUIDA\", \"Nivel3\",\"(=) RECEITA OPERACIONAL LÍQUIDA\",\"Valor\"

所以我使用了这个代码

init.pos <- str_start(s, "\"Nivel1\"",ignore.case = F)
end.pos <- str_end(s, ",\"Valor\"",ignore.case = F)  

substr(s, init.pos, end.pos) <- "\"Nivel1\",  \"(=) RECEITA OPERACIONAL LÍQUIDA\",\"Nivel2\", \"(=) RECEITA OPERACIONAL LÍQUIDA\", \"Nivel3\",\"(=) RECEITA OPERACIONAL LÍQUIDA\", \"Valor\""

当我的子字符串被错误地替换时,就会出现问题。看起来用来替换的字符串在中间被剪掉了。

然后在我的代码中添加这个逻辑:

middle.pos <- (init.pos+end.pos)/2
substr(s, middle.pos, end.pos) <- "\"Nivel3\",\"(=) RECEITA OPERACIONAL LÍQUIDA\", \"Valor\""
substr(s, init.pos, middle.pos-1) <- "\"Nivel1\",  \"(=) RECEITA OPERACIONAL LÍQUIDA\",\"Nivel2\", \"(=) RECEITA OPERACIONAL LÍQUIDA\","

它得到了一些奇怪的输出。我希望您能帮助了解为什么会发生这种情况。


OBS:我之所以使用这个逻辑,是因为我会运行我的代码来用新内容替换“Nivel1”和“Valor”之间的内容,但是它们之间的字符串会有所不同。

【问题讨论】:

    标签: r string replace


    【解决方案1】:

    您可以使用gsub 将“Nivel1”和“Valor”之间的内容替换为新内容。

    tt <- "\"(=) RECEITA OPERACIONAL LÍQUIDA\",\"Nivel2\", \"(=) RECEITA OPERACIONAL LÍQUIDA\", \"Nivel3\",\"(=) RECEITA OPERACIONAL LÍQUIDA\","
    
    gsub("(.*\"Nivel1\").*(\"Valor\".*)", paste("\\1", tt, "\\2"), s, ignore.case = FALSE)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-15
      • 2010-10-04
      • 2015-10-11
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 2020-03-15
      • 1970-01-01
      相关资源
      最近更新 更多