Как написать регулярное выражение, используя Robot Framework для поиска / замены различных строк дат - PullRequest
0 голосов
/ 29 января 2019

У меня есть автоматический тест с использованием 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}

Когда я использую регулярное выражение, которое я приводил в моих примерах, против предоставленной строки на 2 сайтах регулярного выражения,они, кажется, делают все, что мне нужно.Когда я запускаю их с помощью Robot Framework, они не получают хитов.Должно быть, я что-то упустил?

1 Ответ

0 голосов
/ 29 января 2019

Фреймворк робота удалит один уровень обратной косой черты, прежде чем использовать его в качестве регулярного выражения.См. раздел, озаглавленный Escaping , в руководстве пользователя каркаса робота.

Таким образом, если ваше выражение имеет что-то вроде \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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...