在字符串中的特定位置添加前导 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 位数字并修改它们
我有一个这样的字符串列表:
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 位数字并修改它们