【问题标题】:How to extract the just the date from a file path string that also includes time with the format 2020.04.12.10.30.10?如何从包含格式为 2020.04.12.10.30.10 的时间的文件路径字符串中提取日期?
【发布时间】:2020-01-21 12:14:22
【问题描述】:

我有一个如下所示的文件路径字符串:

\\\\server\file\path\string\10X_blah.2020.04.12.10.30.10.xls

我只需要提取 2020.04.12

我试过(?<=\.).*(?=\.)

但它匹配整个日期和时间,我无法学习如何将其限制在匹配的第一部分,即与日期对应的部分。

我正在使用 R 和 mutate(date = str_extract(filepath, pattern) 在我的数据框中创建一个新列。我只是不知道正则表达式来查找日期。

【问题讨论】:

  • 也许匹配 \d{4}\.\d{2}\.\d{2} 就足够了,无需后视。

标签: r regex


【解决方案1】:

您需要做的就是:

\\d{4}\\.\\d{2}\\.\\d{2}

在 R 中:

stringr::str_extract_all(my_string,"\\d{4}\\.\\d{2}\\.\\d{2}")
[[1]]
[1] "2020.04.12"

解释:

  1. \\d{4}\\.四位数年份,后跟一个点
  2. \\d{2}\\.两位数月份,后跟一个点
  3. \\d{2}两位数日

【讨论】:

  • 已编辑,因为 R 使用双斜杠而不是一个反斜杠进行转义。
【解决方案2】:

这不是一个非常强大的解决方案,因为它需要在substringing 之前定位长度。前瞻可能更理想。不过,我们可以这样做:

my_string<- readClipboard() # copy the file path

substring(stringr::str_remove_all(my_string,"\\D.*(?=\\d{4,})"),
          1,10)
[1] "2020.04.12"

如果您知道确切的模式(即 10 总是跟在 . 之后,而 10 总是存在),那么也许:

stringr::str_remove_all(my_string,"\\D.*(?=\\d{4,})|\\.10.*")
[1] "2020.04.12"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多