Как написать регулярное выражение для извлечения даты и времени в формате YYYY-MM-DD HH:MM:SS из строки логов?

Для извлечения даты и времени в формате YYYY-MM-DD HH:MM:SS из строки логов используется следующее регулярное выражение:

b(d{4})-(d{2})-(d{2})s(d{2}):(d{2}):(d{2})b

Это выражение разбивается на части:
— b — граница слова, предотвращает случайные совпадения внутри длинных чисел
— (d{4}) — ровно 4 цифры для года (YYYY)
— — — литеральный дефис-разделитель
— (d{2}) — ровно 2 цифры для месяца (MM)
— — — дефис
— (d{2}) — ровно 2 цифры для дня (DD)
— s — пробел между датой и временем
— (d{2}) — часы (HH)
— : — двоеточие
— (d{2}) — минуты (MM)
— : — двоеточие
— (d{2}) — секунды (SS)

Если нужно захватить всю дату-время как одну группу без разбивки по компонентам, используйте:

bd{4}-d{2}-d{2}sd{2}:d{2}:d{2}b

Примеры использования на разных языках:

Python:
import re
log = ‘2024-03-15 14:22:05 ERROR Something went wrong’
match = re.search(r’bd{4}-d{2}-d{2}sd{2}:d{2}:d{2}b’, log)
if match:
print(match.group()) # 2024-03-15 14:22:05

JavaScript:
const log = ‘2024-03-15 14:22:05 ERROR Something went wrong’;
const match = log.match(/bd{4}-d{2}-d{2}sd{2}:d{2}:d{2}b/);
console.log(match[0]); // 2024-03-15 14:22:05

Grep (командная строка):
grep -oP ‘bd{4}-d{2}-d{2} d{2}:d{2}:d{2}b’ logfile.log

Для более строгой валидации (чтобы исключить невалидные даты вроде 2024-13-45) можно использовать расширенное выражение:

b(d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]d|3[01])s([01]d|2[0-3]):([0-5]d):([0-5]d)b

Здесь:
— (0[1-9]|1[0-2]) — месяцы от 01 до 12
— (0[1-9]|[12]d|3[01]) — дни от 01 до 31
— ([01]d|2[0-3]) — часы от 00 до 23
— ([0-5]d) — минуты и секунды от 00 до 59

При работе с большими лог-файлами рекомендуется компилировать паттерн заранее (например, re.compile() в Python) для повышения производительности. Также учитывайте, что в некоторых логах вместо пробела между датой и временем может стоять символ T (ISO 8601) — тогда замените s на [sT].


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.