我有一个这种字符串列表:
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。这里有什么解决方案? 谢谢
答案 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"