0

我有一组字符串,它们都有 4 位数字,例如:

“FTMS + c NSI 全毫秒 [364.0000-391.0000]”

我想将所有数字转换为只有 2 位数字,这样它就变成了

“FTMS + c NSI 全毫秒 [364.00-391.00]”

字符串没有特定的结构。有简单的单线解决方案吗?

4

2 回答 2

1

这应该有效:

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]"

我们寻找的模式

  • 第一个捕获组:1 个或多个数字,后跟“.” 紧随其后的是 2 个数字
  • 其次是更多的数字

我们匹配上述所有内容,并将其替换为第一个捕获组(第一个项目符号)。

于 2019-03-02T02:53:41.280 回答
0

gsubfn

这仅使用一个简单的模式来匹配表示具有小数的数字的字符串,将每个这样的匹配转换为数字并使用sprintf2 个小数进行格式化。

library(gsubfn)

gsubfn("\\d+\\.\\d+", ~ sprintf("%.2f", as.numeric(x)), s)
## [1] "FTMS + c NSI Full ms [364.00-391.00]"

碱基R

一个基本的解决方案是匹配要保留的部分,然后是剩余的数字,然后只保留要保留的部分。

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]"
于 2019-03-02T13:40:46.873 回答