Sve*_*ven 0 regex string r decimal percentage
我有几行data.frame,其中包含计算规则.在该字符串中我需要转换文本,如:
"{p500} * 65% >= {q600}"
Run Code Online (Sandbox Code Playgroud)
成
"{p500} * 0.65 >= {q600}"
Run Code Online (Sandbox Code Playgroud)
我是正则表达式的新手,但我认为gsub会对此有所帮助.有人可以帮忙吗?
您可以用来gsubfn对正则表达式进行计算:
library(gsubfn)
gsubfn("(\\d+)%", function(x) strtoi(x)/100,"{p500} * 9% >= {q600}")
[1] "{p500} * 0.09 >= {q600}"
Run Code Online (Sandbox Code Playgroud)
请注意,捕获组值通过传递给匿名替换函数 x = \\1
如果您的文本与您提供的示例一致,则可以base像@snoram建议的那样执行多个gsub :
gsub("(\\d)%","0.0\\1",gsub("(\\d{2})%","0.\\1","{p500} * 9% >= {q600}"))
[1] "{p500} * 0.09 >= {q600}"
Run Code Online (Sandbox Code Playgroud)
本(\\d{2})场比赛恰好2个数字和括号创建可以在以后GSUB回顾一组.通过调用\\1替换,您将返回引用您在原始字符串中捕获的组.外部gsub (\\d)%恰好匹配1位数,并在这种情况下替换额外的0.
我自己在正则表达式方面仍然相对较新,但我发现这个备忘单很有帮助:R正则表达式