在字符串(R)中的特定位置添加前导0

时间:2017-08-14 08:57:30

标签: r regex string leading-zero

我有一个这种字符串列表:

f<-c("CC 982","RX 112","TR 002","FF 1328")

我需要在数字部分的开头添加一个前导0,与str_pad函数一样,以达到这个目的:

"CC 0982" "RX 0112" "TR 0002" "FF 1328"

目前,我已尝试使用sub

sub('(.{2})(.{1})(.{3})', "\\1\\20\\3", f) 

足够接近,但如果数字字符串有4位,我不希望前导0。这里有什么解决方案? 谢谢

2 个答案:

答案 0 :(得分:6)

使用sub您可以修改为

sub("(\\D*)(\\b\\d{1,3}\\b)", "\\10\\2", f)
# [1] "CC 0982" "RX 0112" "TR 0002" "FF 1328"

这只会捕获3位数字并修改它们

答案 1 :(得分:5)

我们可以按空格分割字符串,然后使用sprintf加入组件

d1 <- do.call(rbind, strsplit(f, "\\s+"))
sprintf("%s %04d", d1[,1], as.numeric(d1[,2]))
#[1] "CC 0982" "RX 0112" "TR 0002" "FF 1328"

或者gsubfn/sprintf我们得到预期的输出

library(gsubfn)
gsubfn("(\\d+)", ~sprintf("%04d", as.numeric(x)), f)
#[1] "CC 0982" "RX 0112" "TR 0002" "FF 1328"