【问题标题】:R padding 0's inside a string after the hypenR 在连字符后的字符串内填充 0
【发布时间】:2021-03-10 04:35:26
【问题描述】:

我有以下数据

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

【问题讨论】:

标签: r regex string


【解决方案1】:

一种选择是使用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"  

【讨论】:

    【解决方案2】:

    您可以尝试如下使用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")
    

    这里使用的正则表达式模式只匹配破折号后跟一个数字。在这种情况下,我们会在这个数字前添加一个零来替换。

    【讨论】:

    • 如果我有“BUC6-01”刺痛并且我想要这个结果“BUC06-01”我们将如何实现它?
    • 一般来说:gsub("(?&lt;!\\d)(\\d)(?!\\d)", "0\\1", x) 应该可以工作。
    • 很高兴为您提供帮助!
    猜你喜欢
    • 1970-01-01
    • 2022-11-18
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    相关资源
    最近更新 更多