I have an automated test using the Robot Framework that reads a file into a variable. I'm parsing that variable for various date formats and trying to replace the date with the current date using a regex.
What I am struggling with is getting a regex to work in the Robot Framework (I've written a regex in various websites like pythex and regex101 that appears to work with Python for what I need).
${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}
When I use the regex's I provided in my examples against the provided string on the 2 regex websites, they appear to do everything I need. When I run them using the Robot Framework, they get no hits. I must be missing something?
Robot framework will strip one level of backslash before it is used as a regular expression. See the section titled Escaping in the robot framework user guide. Thus, if your expression has something like \s , it will appear to the pattern matcher as a plain s .
END Use Run Keyword If in Robot Framework Run Keyword If ${True} Log This line IS executed. Run Keyword If ${False} Log This line is NOT executed. Use Run Keyword Unless in Robot Framework Run Keyword Unless ${True} Log This line is NOT executed. Run Keyword Unless ${False} Log This line IS executed.
Robot framework will strip one level of backslash before it is used as a regular expression. See the section titled Escaping in the robot framework user guide.
Thus, if your expression has something like \s, it will appear to the pattern matcher as a plain s. The solution is to escape the backslashes with another backslash (eg: \\s\\d+ instead of \s\d+).
Here's a short passing test that illustrates the point.
*** 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
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With