更改字符串中数字的位数

时间:2019-03-02 02:34:09

标签: r regex

我有一组字符串,所有的字符串都带有4位数字,例如:

“ FTMS + c NSI完整ms [364.0000-391.0000]”

我想将所有数字都转换为只有2位数字,以使其变为

“ FTMS + c NSI完整ms [364.00-391.00]”

字符串没有特定的结构。有一个简单的一站式解决方案吗?

2 个答案:

答案 0 :(得分: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个数字
  • 后面有更多数字

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

答案 1 :(得分:0)

gsubfn

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

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