我已经度过了一个美好的早晨,试图整理这个问题,但是找不到更优雅的解决方案。
我具有以下值:
TEST <- Pia1.2016-10-08.1103+N2353.tif
然后我需要“提取”日期和时间,我有以下内容(可以使用,但我100%确信有更好的方法可以做到)
DATEDIR <- sub("[P][i][a][1]\\.","",TEST)
DATEDIR <- sub("\\...............","", DATEDIR)
DATEDIR # to check
我还没有提取时间位,因为我想先将其清除,尽管我希望将时间变量称为
TIMEDIR <-
非常感谢!
答案 0 :(得分:2)
您可以使用
TEST <- 'Pia1.2016-10-08.1103+N2353_hc.tif'
date <- sub('.*?\\.(\\d{4}-\\d{2}-\\d{2})\\..*', '\\1', TEST)
time <- sub('.*?\\.\\d{4}-\\d{2}-\\d{2}\\.(\\d{2})(\\d{2}).*', '\\1:\\2', TEST)
# => [1] "2016-10-08"
# [1] "11:03"
请参见R demo online。请参见Regex 1和Regex 2。
第一个模式匹配
.*?
-任意0个以上的字符,与possilbe一样少\\.
-一个点(\\d{4}-\\d{2}-\\d{2})
-捕获组1(在替换模式中称为\1
):4位数字,-
,2位数字,-
和2位数字\\.
-一个.
.*
-任意0个以上的字符,与possilbe一样多。第二个模式匹配并将随后的两位数字捕获到组1中,并将接下来的两位数字捕获到组2中,\1:\2
替换将时间格式化为HH:mm
字符串。