R在连字符后在字符串内填充0

时间:2021-03-10 04:35:26

标签: r regex string

我有以下数据

GT_BUC-01_BUCST-19
ADT_BURC-1_BUCST-09
BT_BUDDC-1_BUDSCST-29
CAST_BUC-31_BUCST-9
CAST_BUC-1_BUCST-9

如何使用 R 使两个连字符后的数字填充前导零,使其具有两位数?生成的格式应如下所示:

GT_BUC-01_BUCST-19
ADT_BURC-01_BUCST-09
BT_BUDDC-01_BUDSCST-29
CAST_BUC-31_BUCST-09
CAST_BUC-01_BUCST-09

2 个答案:

答案 0 :(得分:2)

一种选择是使用 stringr::str_replace_all

x <- c('GT_BUC-01_BUCST-19', 'ADT_BURC-1_BUCST-09', 
       'BT_BUDDC-1_BUDSCST-29', 'CAST_BUC-31_BUCST-9', 'CAST_BUC-1_BUCST-9')

stringr::str_replace_all(x, '\\d+', function(m) sprintf('%02s', m))

#[1] "GT_BUC-01_BUCST-19"     "ADT_BURC-01_BUCST-09"  
#[3] "BT_BUDDC-01_BUDSCST-29" "CAST_BUC-31_BUCST-09"  
#[5] "CAST_BUC-01_BUCST-09"  

答案 1 :(得分:1)

您可以尝试使用 gsub 如下:

x <- gsub("-(\\d)(?!\\d)", "-0\\1", x, perl=TRUE)
x

[1] "GT_BUC-01_BUCST-19"     "ADT_BURC-01_BUCST-09"   "BT_BUDDC-01_BUDSCST-29"
[4] "CAST_BUC-31_BUCST-09"   "CAST_BUC-01_BUCST-09"  

数据:

x <- c("GT_BUC-01_BUCST-19",
       "ADT_BURC-1_BUCST-09",
       "BT_BUDDC-1_BUDSCST-29",
       "CAST_BUC-31_BUCST-9",
       "CAST_BUC-1_BUCST-9")

此处使用的正则表达式模式仅匹配破折号后跟单个数字。在这种情况下,我们然后通过在此单个数字前面加上零来替换。

相关问题