【问题标题】:How do I determine if a given string has a date or time in it?如何确定给定字符串中是否包含日期或时间?
【发布时间】:2014-10-23 03:50:41
【问题描述】:

我想检查给定的字符串是否包含日期或时间。例如

1) "dfdsf 2014/01/02 dsfdsf"
2) "fgfffdbf 2014-01-02 dfsdfdfd"
3) "dfdfds 02/01/2014"
4) "02/2014/01 dffsdfsd"
5) "2014/01/02 00:30 sdgfsdgsdgvbds"   
6) "02/2014/01 12:20:22 xcbfdgfdg"
7) "01:11:22 02/2014/01 sdgsdgs"
8) "00:30 2014-01-02 fdgfdgd"

所有这些字符串都包含日期或时间。我想构建一个测试/函数,将所有这 8 个字符串标记为“日期/时间”。

【问题讨论】:

  • 你是否使用ifelse并不重要,最大的挑战是制定具体的规则来确定某事是否是约会。
  • Hadley 的包 lubridate 可能有用,但我可能会尝试将它们全部标准化为一种格式...另外,请参阅此 question/answer
  • 我会将它们全部标准化,但问题是我没有提前做任何事情。给定一个字符串的名称,我应该能够判断该字符串是否包含任何日期或时间?

标签: r date datetime


【解决方案1】:

我会使用 'grepl',但如果有一个字符串中的某些东西看起来像日期,但实际上不是,就会出现问题。试试下面的例子:

strings <- c("dfdsf 2014/01/02 dsfdsf", "fgfffdbf 2014-01-02 dfsdfdfd", "dfdfds 02/01/2014", "02/2014/01 dffsdfsd", "2014/01/02 00:30 sdgfsdgsdgvbds",  "02/2014/01 12:20:22 xcbfdgfdg", "01:11:22 02/2014/01 sdgsdgs", "00:30 2014-01-02 fdgfdgd", "NoDateHere")


findDates <- function(strings) {
    pattern1 <- '[0-9][0-9][0-9][0-9]/[0-9][0-9]/[0-9][0-9]'
    pattern2 <- '[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]'
    pattern3 <- '[0-9][0-9]/[0-9][0-9][0-9][0-9]/[0-9][0-9]'
    pattern4 <- '[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]'

    tdBool <- grepl(pattern1, strings) | grepl(pattern2, strings) | grepl(pattern3, strings) | grepl(pattern4, strings)
    return(tdBool)
}

findDates(strings)

【讨论】:

    猜你喜欢
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    相关资源
    最近更新 更多