Regex для захвата метки времени в разных форматах

У меня есть разные форматы времени, которые входят в мой отчет. Я пытаюсь стандартизировать формат. Два, которые я видел до сих пор, заключаются в следующем.

3. When: 150845Z - 161045Z Jan 16
When: 15 08:45Z - 16 10:45Z Jan 16

Моя цель состоит в том, чтобы преобразовать эти данные из вышеприведенного ввода в следующее

Start date and time 01/15/2016 08:45
End date and time 01/16/2016 10:45

У меня есть несколько групп захвата и сплитов, чтобы это произошло и, если быть точным, это довольно много, и я думаю, что это можно упростить.

Я могу опубликовать каждый шаг кода, который у меня есть, однако это действительно раздувает этот пост. Для даты и времени начала я делаю следующее

(?s)(?<=^.When:\s)[a-zA-Z0-9]+

Для даты и времени окончания я делаю следующее

When:.+(?<=- )(\w.*)

Я действительно хотел бы уменьшить это как можно больше. Я пытался реализовать этот метод Regex для захвата различных форматов дат, однако я действительно новичок в Regex и собираю элементы вместе, пока не получу его работу.

Спасибо

Дополнительная информация

В настоящее время я обязан использовать рабочие процессы Nintex для преобразования данных. Я хотел бы начать захват после When:\s тогда я могу использовать [, :] удалить оставшиеся пробелы и двоеточия. Это оставит данные в формате, которым я могу манипулировать.

1 ответ

Решение

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

^.*?When:\s*(\d{2})\s*(\d{2}):?(\d{2}Z)\s*-\s*(\d{2})\s*(\d{2}):?(\d{2}Z)\s*(\‌​w+)\s*(\d{1,2})$

И заменить на $1$2$3$4$5$6$7$8,

Посмотреть демо-версию регулярного выражения

Суть в том, чтобы сопоставить и захватить то, что нам нужно, и заново вставить эти захваченные тексты с помощью обратных ссылок ($ns) в шаблоне замены, и те части, которые мы только что сопоставили, будут удалены из результирующей строки.

Вот еще некоторые подробности, чтобы вы могли настроить шаблон позже:

  • ^ - начало строки / строки (не знаю, позволяет ли инструмент сопоставлять строки)
  • .*? - сопоставить 0+ символов, кроме новой строки, как можно меньше до первого
  • When: - буквальная строка When:
  • \s* - 0+ пробельных символов
  • (\d{2}) - 2 цифры (группа 1)
  • \s* - 0+ пробельных символов
  • (\d{2}) - 2 цифры (группа 2)
  • :? - необязательный :
  • (\d{2}Z) - 2 цифры + Z (Группа 3)
  • \s*-\s* - 0+ whitepsaces, буквальный - и 0+ пробелы
  • (\d{2})\s*(\d{2}):?(\d{2}Z)\s* - см. выше (группа 4, 5, 6)
  • (\‌​w+) - 1+ слова слова (буквы, цифры или подчеркивание) (группа 7)
  • \s* - 0+ whitepsaces
  • (\d{1,2}) - 1 или 2 цифры (группа 8)
  • $ - конец строки
Другие вопросы по тегам