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
,
Посмотреть демо-версию регулярного выражения
Суть в том, чтобы сопоставить и захватить то, что нам нужно, и заново вставить эти захваченные тексты с помощью обратных ссылок ($n
s) в шаблоне замены, и те части, которые мы только что сопоставили, будут удалены из результирующей строки.
Вот еще некоторые подробности, чтобы вы могли настроить шаблон позже:
^
- начало строки / строки (не знаю, позволяет ли инструмент сопоставлять строки).*?
- сопоставить 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)$
- конец строки