r - 替换子字符串的问题
问题描述
让字符串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”之间的内容,但是它们之间的字符串是不同的。
解决方案
您可以使用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)
推荐阅读
- typescript - 扩展类型的泛型和 Typescript 中的普通类型有什么区别?
- sql - 如何将排序记录伪装成编辑器的行号
- sharepoint - 如何使用 Power App 检查 SharePoint 中的重复列表?
- node.js - 如何使用 node.js 从服务器端刷新浏览器?
- python - 如何在 Windows 上一致地分割路径
- pandas - Pandas Dataframe 重命名 Row 中的重复值
- php - 制作标签标签中心
- r - 添加新变量金融数据集 r
- python - 将子网内层的参数重用到该子网外的层
- python - ViewSet、ModelViewSet、APIView的区别