【问题标题】:Find pattern in string and extract following value [closed]在字符串中查找模式并提取以下值
【发布时间】:2018-03-08 22:01:19
【问题描述】:

在R中,我需要通过字符串中的代码找到下一个值

使用 C 的示例 1

function("C", "01_BP01_C_2_MMAX_8__TIME_SECONDS_1.json")

解决方案:2

使用 MMAX 的示例 2

function("MMAX", "01_BP01_C_2_MMAX_8__TIME_SECONDS_1.json")

解决方案:8

使用 MMAX 的示例 3

function("MMAX", "01_BP01_C_2_MMAX_12__TIME_SECONDS_1.json")

解决方案:12

【问题讨论】:

    标签: r string


    【解决方案1】:

    这里是基于strpslit的自定义函数:

    getResult <- function(pattern, target, splitPattern = "_") {
        foo <- unlist(strsplit(target, splitPattern))
        foo[which(foo == pattern) + 1]
    }
    # Returns 2 
    getResult("C", "01_BP01_C_2_MMAX_8__TIME_SECONDS_1.json")
    # Returns 8
    getResult("MMAX", "01_BP01_C_2_MMAX_8__TIME_SECONDS_1.json")
    

    【讨论】:

    • 这个解决方案效果非常好非常感谢:)
    • @BorisAlmonacid 如果它解决了你的问题,那么你可以接受我的回答 :-)
    【解决方案2】:

    使用gsub 和正则表达式,您可以这样做:

    str <- c("01_BP01_C_2_MMAX_8__TIME_SECONDS_1.json", 
             "01_BP01_C_2_MMAX_8__TIME_SECONDS_1.json",
             "01_BP01_C_2_MMAX_12__TIME_SECONDS_1.json")
    
    pat <- c("C", "MMAX", "MMAX")
    
    splt <- function(pattern, string) {
      as.numeric(gsub(paste0("^.*?", pattern, ".*?(\\d+).*"), "\\1", string))
    }
    
    sapply(1:length(str), function(x) splt(pat[x], str[x]))
    
    [1]  2  8 12
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      • 2017-02-25
      • 2021-01-13
      • 2019-12-24
      相关资源
      最近更新 更多