【问题标题】:How would I extract the date from a string that contains random information?如何从包含随机信息的字符串中提取日期?
【发布时间】:2021-12-08 04:25:58
【问题描述】:

我有格式为

的字符串
NHS%20Workforce%20Statistics%2C%20April%202018%20Organisation%20-%20Excel%20tables.xlsx
NHS%20Workforce%20Statistics%2C%20September%202018%20Organisation.xlsx

如何从中提取日期?在第一个示例中,日期为 2018 年 4 月,第二个示例为 2018 年 9 月。(注意,并不总是 2018 年)

到目前为止,我已经尝试创建一个月份的列向量并执行str_match 来查看是否有任何字符串包含向量中的月份。然后我打算使用正则表达式来查找包含日期的 6 位值,然后选择这些值中的最后四个。我觉得这种方式比较长,使用tidyverse有更快的解决方案。

【问题讨论】:

    标签: r date tidyverse


    【解决方案1】:

    提取第一个单词及其后出现的四位数字。

    基础 R 选项 -

    vec <- c("NHS%20Workforce%20Statistics%2C%20April%202018%20Organisation%20-%20Excel%20tables.xlsx",
             "NHS%20Workforce%20Statistics%2C%20September%202018%20Organisation.xlsx")
    
    return_date <- function(x) {
      sub('.*?([A-Za-z]+)%20.*(\\d{4}).*', '\\1 \\2', x)
    }
    
    return_date(vec)
    #[1] "April 2018"     "September 2018"
    

    【讨论】:

      【解决方案2】:

      我们可以使用format(..., "%B) 快速创建月份列表,然后剩下的就是将其放入应提取的模式中:

      pattern <- paste0("^.*(", paste(format(ISOdate(2020,1:12,1),"%B"), collapse = "|"), ")%20(\\d+).*$")
      gsub(pattern, "\\1 \\2", your_text)
      

      【讨论】:

        【解决方案3】:

        请注意,文件名中的空格将被替换为%20

        类似下面的方法会起作用(您只需将其余月份添加到正则表达式中。

        example <- "NHS%20Workforce%20Statistics%2C%20April%202018%20Organisation%20-%20Excel%20tables.xlsx"
        example2 <- "NHS%20Workforce%20Statistics%2C%20September%202018%20Organisation.xlsx"
        
        
        file_name <- str_replace_all(example, "%20", " ")
        str_extract(file_name, "(April|September) \\d{4}")
        

        对于你得到的第一个例子:

        [1] "April 2018"

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-04-16
          • 1970-01-01
          • 1970-01-01
          • 2015-01-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多