我有一组字符串,它们都有 4 位数字,例如:
“FTMS + c NSI 全毫秒 [364.0000-391.0000]”
我想将所有数字转换为只有 2 位数字,这样它就变成了
“FTMS + c NSI 全毫秒 [364.00-391.00]”
字符串没有特定的结构。有简单的单线解决方案吗?
这应该有效:
library(stringr)
x = "FTMS + c NSI Full ms [364.0000-391.0000]"
str_replace_all(x, "([0-9]+\\.[0-9]{2})[0-9]+", "\\1")
# [1] "FTMS + c NSI Full ms [364.00-391.00]"
我们寻找的模式
我们匹配上述所有内容,并将其替换为第一个捕获组(第一个项目符号)。
这仅使用一个简单的模式来匹配表示具有小数的数字的字符串,将每个这样的匹配转换为数字并使用sprintf
2 个小数进行格式化。
library(gsubfn)
gsubfn("\\d+\\.\\d+", ~ sprintf("%.2f", as.numeric(x)), s)
## [1] "FTMS + c NSI Full ms [364.00-391.00]"
一个基本的解决方案是匹配要保留的部分,然后是剩余的数字,然后只保留要保留的部分。
gsub("(\\d+\\.\\d{2})\\d+", "\\1", s)
## [1] "FTMS + c NSI Full ms [364.00-391.00]"
输入是:
s <- "FTMS + c NSI Full ms [364.0000-391.0000]"