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

add leading 0 at a specific position in a string (R)

我有一个这样的字符串列表:

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。这里的解决方案是什么? 谢谢

我们可以用space拆分字符串,然后用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"

使用 sub 你可以修改为

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

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