正则表达式需要一个简单的整理

时间:2019-01-14 14:04:35

标签: r regex

我已经度过了一个美好的早晨,试图整理这个问题,但是找不到更优雅的解决方案。

我具有以下值:

TEST <- Pia1.2016-10-08.1103+N2353.tif

然后我需要“提取”日期和时间,我有以下内容(可以使用,但我100%确信有更好的方法可以做到)

DATEDIR <- sub("[P][i][a][1]\\.","",TEST)
DATEDIR <- sub("\\...............","", DATEDIR)
DATEDIR                                               # to check 

我还没有提取时间位,因为我想先将其清除,尽管我希望将时间变量称为

TIMEDIR <- 

非常感谢!

1 个答案:

答案 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 1Regex 2

第一个模式匹配

  • .*?-任意0个以上的字符,与possilbe一样少
  • \\.-一个点
  • (\\d{4}-\\d{2}-\\d{2})-捕获组1(在替换模式中称为\1):4位数字,-,2位数字,-和2位数字
  • \\.-一个.
  • .*-任意0个以上的字符,与possilbe一样多。

第二个模式匹配并将随后的两位数字捕获到组1中,并将接下来的两位数字捕获到组2中,\1:\2替换将时间格式化为HH:mm字符串。