首页 > 解决方案 > 在文本中的单个数字整数后添加小数分隔符和两个零

问题描述

我有两个变量,如下所示:

x <- "3%-1ST $100000 AND 1.25% BALANCE"
y <- "3.22%-1ST $100000 AND 1.25% BALANCE"

我想要做的是添加并将.003%更改为3.00%使用正则表达式;但是,3.22应该是完整的,不需要更改它(我的主数据集有 50000 行,这两个只是一个例子)我首先尝试了下面的代码:

gsub("\\b(\\d)%\\b", "\\1\\.00%", x)

结果如下所示:

[1] "3%-1ST $100000 AND 1.25% BALANCE"
[2] "3.22%-1ST $100000 AND 1.25% BALANCE"

如您所见,我没有成功进行更改。我尝试了另一个没有\\b. 结果如下所示:

[1] "3.00%-1ST $100000 AND 1.25.00% BALANCE"
[2] "3.22.00%-1ST $100000 AND 1.25.00% BALANCE"

这个结果也是不可接受的,因为它改变了 3.22。我想\\b必须定义字符串的边界;但是,由于某种我不确定的原因,它不起作用。您能否澄清一下我如何完成这项任务以及使用有什么问题\\b

标签: rregexstringreplace

解决方案


数据:

x <- c("3%-1ST $100000 AND 1.25% BALANCE", 
       "3.22%-1ST $100000 AND 1.25% BALANCE", 
       "12.15% AND 5%")

解决方案:

gsub("(?<!\\d\\.\\d)(\\d)(%)", "\\1.00\\2", x, perl = T)
[1] "3.00%-1ST $100000 AND 1.25% BALANCE" "3.22%-1ST $100000 AND 1.25% BALANCE" "12.15% AND 5.00%" 

解决方案不在于使用单词边界,而是定义一个发生替换的否定条件。该否定条件是使用否定的lookbehind 实现的(?<!...)

更详细的回顾:

  • (?<!:这会初始化否定的lookbehind,这是一个匹配的指令,如果在左边你看不到......

    • \\d: 一个数字
    • \\.: 一段时间
    • \\d: 一个数字
  • ):这个括号结束了负面的回顾


推荐阅读