Извлечение многострочного текста в конструкции робота - PullRequest
0 голосов
/ 06 мая 2020

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

$cat f1

START:
line1
line2
line3
line4
END
START
line a
line b
line c
END

Код ниже печатается пустым:

   ${txt}    Get File  f1
   ${m}       Get Regexp Matches    ${txt}    START(.*)END    1
   Log To Console     ${m}

1 Ответ

1 голос
/ 06 мая 2020

Первая проблема заключается в том, что . обычно не соответствует новой строке. Таким образом, (.*) будет соответствовать только до конца строки. Вы можете решить эту проблему, добавив к регулярному выражению префикс (?s), который устанавливает флаг DOTALL .

Вторая проблема в том, что .* - это жадный , то есть он сожрет как можно больше. Таким образом, он получит все символы после первого START, за которым следуют все символы до последнего END. Чтобы сделать его не жадным, измените его на .*?, чтобы он собирал символы после первого START и перед первым END.

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

${m}    Get Regexp Matches    ${txt}    (?s)START(.*?)END    1

Это приведет к двум совпадениям (разделены для ясности):

  • :\nline1\nline2\nline3\nline4\n
  • \nline a\nline b\nline c\n

Если вам не нужны символы новой строки, вам нужно будет еще немного обработать данные.

...