Robot Framework使用Get Lines关键字实现精确字符串匹配提取指定行的问题
问题排查
原有正则写法的错误点
- 第一种写法
r'\babc\\b':存在两处错误,一是Robot Framework的正则表达式不需要加r前缀,二是第二个\b多写了转义反斜杠,变成匹配字面量\b字符,无法匹配到目标内容。 - 第二种写法
^.*abc.*$:只要行内包含abc就会匹配,无法区分abc、abcmnp、abcpqrs,会把所有含abc片段的行都查出来,不符合精确匹配要求。 - 第三种写法
/^abc$/:首先Robot Framework的正则不需要加前后的/分隔符,其次^abc$要求整行内容只有abc三个字符,和你的测试文本行格式完全不符,自然匹配不到结果。
解决方案
你需要用**单词边界符\b**来限定abc/abcmnp是独立的字符串片段,不会和前后的字母连在一起,具体实现代码如下:
1. 提取精确匹配abc的前3行
# 匹配所有包含独立abc的行 ${all_abc_lines}= Get Lines Matching Regexp ${output} \babc\b # 截取前3行 ${top3_abc}= Get Slice From List ${all_abc_lines} 0 3 Log ${top3_abc}
2. 提取精确匹配abcmnp的行
${abcmnp_lines}= Get Lines Matching Regexp ${output} \babcmnp\b Log ${abcmnp_lines}
正则说明
\b是单词边界标识,会匹配单词字符(字母、数字、下划线)和非单词字符的交界位置,你的测试文本中目标字符串前后都是分隔符-(属于非单词字符),所以\babc\b只会匹配独立的abc片段,不会匹配abcmnp、abcpqrs这类后面还带其他字母的内容。
内容的提问来源于stack exchange,提问作者PAVAN PATIL
相关产品推荐
相关产品推荐

