如何确定给定字符串中是否包含日期或时间?

时间:2014-10-22 18:36:17

标签: r date datetime

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

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个字符串标记为"日期/时间"。

1 个答案:

答案 0 :(得分:4)

我会使用' 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)