base-R 中的简单解决方案,但使用(可选)magrittr 以提高可读性
# data + library
str <- c("{p500} * 65% >= {q600}", "{p500} * 9% >= {q600}")
library(magrittr)
# Apply gsub twice:
str %>%
gsub("(\\d{2})%", "0\\.\\1", .) %>%
gsub("(\\d{1})%", "0\\.0\\1", .)
[1] "{p500} * 0.65 >= {q600}" "{p500} * 0.09 >= {q600}"
编辑
鉴于 cmets 中的新案例,我想最好放弃上面的简单方法并尝试不同的方法。这是一个快速而肮脏的例子(仍然依赖于好的 ol' base-R):
# New data
str <- c(
"{p500} * 65% >= {q600}",
"{p500} * 9% >= {q600}",
"{p500} * 190% >= {q600}",
"{p500} * 2.4% >= {q600}")
# Quick and dirty
strmat <- do.call(rbind, strsplit(str, " "))
strmat[, 3] <- as.double(gsub("%", "", lapply(strsplit(str, " "), "[", 3))) / 100
apply(strmat, 1, paste, collapse=" ")
[1] "{p500} * 0.65 >= {q600}" "{p500} * 0.09 >= {q600}" "{p500} * 1.9 >= {q600}"
[4] "{p500} * 0.024 >= {q600}"