如何使用 Robot Framework 编写正则表达式来查找/替换各种日期字符串

Chu*_*tor 5 python regex robotframework

我使用 Robot Framework 进行了自动化测试,该测试将文件读入变量。我正在解析各种日期格式的变量,并尝试使用正则表达式将日期替换为当前日期。

我正在努力让正则表达式在 Robot Framework 中工作(我已经在各种网站上编写了一个正则表达式,比如 pythex 和 regex101,它似乎可以与 Python 一起工作来满足我的需要)。

${date}=  get current date
${datetime}=  convert date    ${date}  datetime
${MonthList}=  create list  January  February  March  April  May  June  July  August  September  October  November  December
${monthName}=  get from list  ${MonthList}  ${datetime.month-1}    
${ExpectedFileAsString}=  set test variable  January 23, 2009 May 1, 2020 05/21/1990 05/1/1990 5/21/1990 5/2/1990

${ExpectedFileAsString}=  replace string using regexp  ${ExpectedFileAsString}  ([A-Z][a-z]+\s\d+,\s\d\d\d\d)  ${monthName} ${datetime.day}, ${datetime.year}

${match1}=  get regexp matches  ${ExpectedFileAsString}  [A-Z][a-z]+\s\d+,\s\d\d\d\d
log  matches 1: ${match1}  console=yes

${match2}=  get regexp matches  ${ExpectedFileAsString}  [A-Z][a-z]{2,8}\s\d{1,2},\s\d{4}
log  matches 2: ${match2}  console=yes

${ExpectedFileAsString}=  replace string using regexp  ${ExpectedFileAsString}  ([A-Z][a-z]{2,8}\s\d{1,2},\s\d{4})  ${monthName} ${datetime.day}, ${datetime.year}

${ExpectedFileAsString}=  replace string using regexp  ${ExpectedFileAsString}  (?<![/\d])\d{1,2}/\d{1,2}/\d{4}(?![/\d])  ${datetime.month}/${datetime.day}/${datetime.year}
Run Code Online (Sandbox Code Playgroud)

当我使用我在示例中提供的正则表达式与 2 个正则表达式网站上提供的字符串时,它们似乎可以完成我需要的一切。当我使用 Robot Framework 运行它们时,它们没有命中。我肯定错过了什么?

Bry*_*ley 8

Robot 框架将在用作正则表达式之前去除一级反斜杠。请参阅机器人框架用户指南中标题为转义的部分

因此,如果你的表达式有类似的东西\s,它会在模式匹配器中显示为一个普通的s. 解决方案是用另一个反斜杠(例如:\\s\\d+代替\s\d+)来转义反斜杠。

这是一个简短的通过测试,说明了这一点。

*** Variables ***
${Example String}  January 23, 2009

*** Test Cases ***
Example
    Run keyword and expect error
    ...  'January 23, 2009' does not match 'Januarys23'
    ...  Should match regexp  ${Example String}  January\s23

    Should match regexp  ${Example String}  January\\s23
Run Code Online (Sandbox Code Playgroud)