Регулярное выражение для соответствия строке после времени

Борясь с извлечением имен хостов из сообщений журнала, он сбивается, когда дата меняется с 2-х на однозначное, например, с 31 октября по 1 ноября, начало извлечения ключевого слова ... вот несколько журналов, для которых мне нужно извлечь имена хостов

  • 1 ноя 00:00:21 akdcs20.ftc.abcd-ipsn AKDCS20 fpc0 LBCM-L2, brcm_port_learning_config (), 1258: (brcm_port_learning_config: 1258) Установка единицы обучения L2: 0, port_num: 44, learn_flg 5
  • 1 ноября 01:27:16 spnztpm01.abcd-ipsn 553177: LC / 0/0 / CPU0: 1 ноября 01: 27: 16.040: ifmgr [200]:% PKT_INFRA-LINEPROTO-5-UPDOWN: Строка протокол на Интерфейсе TenGigE0 / 0/0 / 1.172153, состояние изменено на Up

  • 31 октября 23:59:56 akdcs19.ftc.abcd-ipsn AKDCS19 ufdd [1679]: ufd_group_config_if_lookup ifname ae4

Для всех трех вышеперечисленных строк я хочу извлечь

  • akdcs19.ftc.abcd-ipsn
  • spnztpm01.abcd-ipsn
  • akdcs20.ftc.abcd-ipsn

текущее регулярное выражение, которое я использую, ^(?:[^ \n]* ){4}(?P<devicename1>[^ ]+)

1
0
62
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

\s\d{2}(?::\d{2}){2}\s+(?P<devicename1>\S+)

См. демонстрация регулярного выражения.

Или более явный шаблон:

^\w+\s+\d+\s+\d{2}(?::\d{2}){2}\s+(?P<devicename1>\S+)

См. еще одна демонстрация.

Подробности

  • ^\w+\s+\d+\s+ - начало строки, 1+ символов слова, 1+ пробелов, 1+ цифр, 1+ пробелов (то есть, чтобы убедиться, что мы попадаем в нужную временную подстроку)
  • \d{2} - две цифры
  • (?::\d{2}){2} - две последовательности : и две цифры
  • \s+ - 1+ пробелов
  • (?P<devicename1>\S+) - Группа «devicename1»: один или несколько непробельных символов.

Учитывая, что часть даты всегда будет месяц с 3 символами, день с 1-2 и время с HH: MM: ss:

^(?:\w{3}\s\d{1,2}\s\d{2}:\d{2}:\d{2}\s)(?P<devicename1>[^ ]+)

Regex 101

Другие вопросы по теме