我从json
格式的{{example_value}}
获得了一些动态值。我有一些R代码来计算实际值。但是,我发现用实际值替换占位符的唯一解决方案是非常漫长和丑陋。
有没有人有任何整洁的解决方案?
将{{example_value}}
替换为5.5
:
> gsub( gsub("\\}","\\\\}",gsub("\\{","\\\\{","{{example_value}}")),
5.5, "{{example_value}}")
[1] "5.5"
另一个例子解释了为什么我写了嵌套的gsub:
dictionary = "{{example_value}}"
> gsub( gsub("\\}","\\\\}",gsub("\\{","\\\\{",dictionary)),
5.5, "{{example_value}}")
[1] "5.5"
通常dictionary
是一个列表,其中包含我希望替换的所有动态值。
答案 0 :(得分:2)
您可以使用:
gsub("{{example_value}}", "5.5", subject, perl=TRUE);
答案 1 :(得分:1)
虽然@ zx81的建议似乎最适合直接替换,但您也可以使用正则表达式来提取大括号中的标记。
a<-"The total is {{example}} dollars less"
m <- regexpr("{{([^}]+)}}", a, perl=T)
regmatches(a, m)
# [1] "{{example}}"
然后regmatches
有一个很好的功能,您可以轻松替换匹配
regmatches(a, m) <- 5.5
a
# [1] "The total is 5.5 less"
这是一种巧妙的技巧。
答案 2 :(得分:1)
编辑:也许这可能会引导您找到您想要的内容。
re <- c('{{foo}}', '{{bar}}')
val <- c('5.5', '1.1')
recurse <- function(pattern, repl, x) {
for (i in 1:length(pattern))
x <- gsub(pattern[i], repl[i], x, perl=T)
x
}
x <- 'I have {{foo}} and {{bar}}'
recurse(re, val, x)
# [1] "I have 5.5 and 1.1"