Robot Framework — регулярное выражение Lookaround

Я пытаюсь найти способ заставить Robot Framework захватывать текст между известными строками в файлах журнала. Я хотел бы использовать это для захвата переменных (например, IP-адресов) для передачи их через мои планы тестирования.

Примеры журналов: (Обратите внимание на различные временные метки, я не могу их контролировать, и разработчики, похоже, по какой-то причине любят их менять.)

[2014-10-11T22:34:00.11] TCPConnect — подключение к 192.168.21.139 через порт 8030.

[2014-10-11 22:34:00.11] TCPConnect — подключение к devbox01 через порт 9718.

[2014-10-11] [22:34:00.11] TCPConnect — подключение к devbox01.here.local.net через порт 8712.

Если я использую ключевое слово «Получить строки, соответствующие регулярному выражению» и регулярное выражение:

(?<=.*Connecting to )(.*?)(?= on port .*)

Я получил:

ошибка: просмотр назад требует шаблона фиксированной ширины

Я ожидал получить IP-адрес, имя хоста и что-либо еще между «Подключение к» и «на порту», ​​но это не так. Я понимаю, что это связано с python 2.6, и, по-видимому, 2.7 будет включать эту функциональность; Я надеюсь разобраться с этим в текущих выпусках.

У кого-нибудь есть идеи?


person Colin    schedule 05.11.2014    source источник


Ответы (1)


Я не думаю, что вам нужно использовать look-behind здесь. Это должно соответствовать указанным строкам:

| | ${lines} | Get lines matching regexp | ${data} | .*Connecting to .* on port.*

Обратите внимание, что это возвращает совпадающие целые строки — это не имеет ничего общего с шаблоном, это просто то, как работает это ключевое слово. Даже если вы добавите захватывающие или не захватывающие группы, вы получите всю совпавшую строку. Если вы хотите получить только IP-адреса, вам придется выполнить дополнительный анализ возвращаемых строк.

person Bryan Oakley    schedule 05.11.2014
comment
Да, в библиотеках Builtin или String нет ключевых слов, которые делают то, что нужно. Либо Split String, либо ключевое слово пользователя python будут лучшими вариантами. - person Paul Hicks; 06.11.2014