【问题标题】:Extract date from a given string in R从R中的给定字符串中提取日期
【发布时间】:2017-10-02 15:41:15
【问题描述】:

这是我拥有的字符串

"7MA_S_VE_MS_FB_MEASURE_P1_2013-08-21_17-42-19.BMP"

我正在尝试以这种方式提取日期:

library(stringr)
as.Date(str_extract(test,"[0-9]{4}/[0-9]{2}/[0-9]{2}"),"%Y-%m-%d")

为此,我得到 NA

期望的输出

2013-08-21

有人能指出我正确的方向吗?

【问题讨论】:

  • 在基础 R 中,as.Date(regmatches(tmp, regexpr("[0-9]{4}-[0-9]{2}-[0-9]{2}", tmp))) 其中 tmp 是您的字符向量。您可能只需在正则表达式中将“/”替换为“-”即可。
  • @lmo,谢谢你成功了
  • 使用您的代码,但就像@lmo 所说的将“/”替换为“-”。

标签: r datetime gsub


【解决方案1】:

您已在正则表达式中将破折号 - 替换为斜线 /

as.Date(str_extract(string, "[0-9]{4}-[0-9]{2}-[0-9]{2}"), format="%Y-%m-%d")
# [1] "2013-08-21"

但您也可以将[0-9] 位替换为\d,它们代表相同的内容。我不知道为什么,但正则表达式专家似乎总是使用\d 版本(请注意,你必须用另一个反斜杠转义反斜杠):

as.Date(str_extract(string, "\\d{4}-\\d{2}-\\d{2}"), format="%Y-%m-%d")
# [1] "2013-08-21"

【讨论】:

    【解决方案2】:

    如果是固定位置

    as.Date(strsplit(str1, "_")[[1]][8])
    #[1] "2013-08-21"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      • 2016-06-24
      相关资源
      最近更新 更多