Простое прибавление в регулярных выражениях - PullRequest
0 голосов
/ 14 января 2019

Доброе утро я пытался навести порядок, но не могу найти более элегантного решения.

У меня есть следующее значение:

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 голосов
/ 14 января 2019

Вы можете использовать

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 онлайн . См. Regex 1 и Regex 2 .

Первый шаблон соответствует

  • .*? - любые 0+ символов, как можно меньше
  • \\. - точка
  • (\\d{4}-\\d{2}-\\d{2}) - Группа захвата 1 (обозначается \1 из шаблона замены): 4 цифры, -, 2 цифры, - и 2 цифры
  • \\. - .
  • .* - любые 0+ символов, столько, сколько возможно.

Второй шаблон сопоставляет и записывает следующие две цифры в Группу 1, а следующие две цифры в Группу 2, а замена \1:\2 форматирует время в строку HH:mm.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...