代码之家  ›  专栏  ›  技术社区  ›  Neal Barsch

regex只保留单词r之前的最后一个数字(可复制)[重复]

  •  1
  • Neal Barsch  · 技术社区  · 6 年前

    这个问题已经有了答案:

    我有一列日期、数字+日期和NA,格式如下,我只想保留日期部分,删除R中的另一个数字,可能使用SUB或GSUB?很高兴接受一个帮助我的答案:)

    df <- data.frame(a=c(1:11), datecol=c("11 June 2018", NA, NA, "400 10 June 2017",NA,"5 05 June 2018", NA, NA, NA, NA, "25 15 May 2016"))
    
    df.desired <- data.frame(a=c(1:11), datecol=c("11 June 2018", NA, NA, "10 June 2017",NA,"05 June 2018", NA, NA, NA, NA, "15 May 2016"))
    
    2 回复  |  直到 6 年前
        1
  •  4
  •   akrun    6 年前

    我们可以使用 sub 匹配1或2位数的模式( \\d{1,2} ),后跟空格、单词( \\w+ )对于月份、空格和表示“年”的最后4位数字,将其捕获为一个组,并在替换中使用捕获组的回溯引用

    sub(".*\\s+(\\d{1,2}.*\\w+\\s+\\d{4}$)", "\\1", df$datecol)
    #[1] "11 June 2018" NA             NA             "10 June 2017" NA            
    #[6] "05 June 2018" NA             NA             NA             NA            
    #[11] "15 May 2016" 
    
        2
  •  2
  •   PKumar    6 年前

    你也可以使用, stringr 包裹:

    stringr::str_extract(df$datecol,"\\d{1,2}\\s+[a-zA-Z]+\\s+\\d{4}")
    

    产量 :

    > stringr::str_extract(df$datecol,"\\d{1,2}\\s+[a-zA-Z]+\\s+\\d{4}")
     [1] "11 June 2018" NA             NA             "10 June 2017"
     [5] NA             "05 June 2018" NA             NA            
     [9] NA             NA             "15 May 2016"