机器人框架Regexp

时间:2015-05-26 15:08:54

标签: python regex robotframework

我的数据格式如下

name                      | height      | hex assigned
[alphanumeric and spaces] | [numeric] cm| [hex]:[hex]
20 char                   | 5 char      | 1 char: 1 char

我想要做的是,匹配正则表达式

${escaped}=  Regexp Escape  '[A-Za-z0-9_\s] | [0-9]+ cm| [0-9a-f]:[0-9a-f]'
Should Match Regexp  ${text}  ${escaped}

虽然文字是正确的,但测试仍然失败。

如果有人能够指出我做错了什么,我真的很感激。

2 个答案:

答案 0 :(得分:2)

您可以使用以下内容:

^[A-Za-z0-9_\s]{1,20}\s+\|\s+[0-9]{5} cm\|\s+[0-9a-f]:[0-9a-f]$

请参阅DEMO

答案 1 :(得分:2)

如果你转义正则表达式,你实际上是将表达式转换为固定字符串。您还有一个问题,即您的模式以单引号开头和结尾。由于机器人将整个单元格视为表达式,因此只有实际开始和结束时,表达式才会匹配。

解决方案需要对您正在做的事情进行一些更改:

  1. 从表达式中删除单引号,除非您的实际数据也有单引号
  2. 调用Regexp Escape
  3. 执行转义模式中的管道,因为这些管道是专门用正则表达式处理的
  4. 添加锚点(^$)除非您想在字符串中的任何位置匹配模式
  5. 请记住,\在机器人文件中很特殊,因此要在模式中获得反斜杠,在定义模式时必须包含两个反斜杠
  6. 我认为以下是您想要的:

    *** Variables ***
    ${pattern}    ^[A-Z0-9_\\s]{1,20} \\| [0-9]+ cm\\| [0-9A-Fa-f]:[0-9A-Fa-f]$
    
    *** Test cases ***
    Example
        Should Match Regexp        12345678901234567890 | 1 cm| 3:5    ${pattern}