机器人框架中的多行文本提取

时间:2020-05-06 14:29:15

标签: regex string robotframework

我有多行文字。我想提取某些模式之间的文本。

11 8 2 7

4

1 5 3 7

2 2 4 5

5 3 9 4

5 3 7 8

下面的代码打印为空:

$cat f1

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

1 个答案:

答案 0 :(得分:1)

第一个问题是.通常不会与换行符匹配。因此,(.*)仅匹配到该行的末尾。您可以通过在正则表达式前面加上(?s)来解决此问题,该正则表达式设置DOTALL标志。

第二个问题是.* greedy ,这意味着它将尽可能多地吞噬。因此,它将获得第一个START之后的所有字符,然后是直到 last END的所有字符。要使其不贪婪,请将其更改为.*?,以便它将在第一个START之后和第一个END之前捕获字符。

有了这些更改,您的声明将如下所示:

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

这将导致两场比赛(为清楚起见,将其分开):

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

如果您不希望使用换行符,则需要对数据进行进一步的处理。