С помощью Excel, как изолировать сценарии огурца из файла объектов? - PullRequest
0 голосов
/ 14 октября 2019

В Excel я хочу изолировать сценарии огурца от (написанного на Java) файла объектов. Я ищу массив, в котором каждый элемент представляет собой один сценарий.

Я придумал несколько регулярных выражений, которые делают то, что я хочу, в Rubular и Regex101 с (по-видимому) точно таким же текстом, нокогда я выполняю «.Execute» из моего макроса Excel, возвращается весь файл.

Это образец текста:

@ optionFeatureLevel
Tag Feature:какая-то функция

Сценарий: сценарий1
Что-то дано
Когда что-то
Тогда что-то

@ optionTag
Сценарий: сценарий2
Если дано что-то еще
Когдачто-то еще
Затем что-то еще

Краткое описание сценария: сценарий3
Дано еще одно что-то
Когда еще одно что-то
Затем еще одно что-то

Функция:некоторые функцииЭто функция, которую я написал, у меня есть «Set arrayOrResults = returnAllStringsMatchingRegEx», получающий ее на другом конце:

Function returnAllStringsMatchingRegEx(sourceString As String, pattern As String) As Variant

    Dim regEx As New RegExp

    With regEx
        .Global = True
        .MultiLine = True
        .ignoreCase = True
        .pattern = pattern
    End With

    If regEx.Test(sourceString) Then
        Set returnAllStringsMatchingRegEx = regEx.Execute(sourceString)
    Else
        Set returnAllStringsMatchingRegEx = Nothing
    End If

End Function

Вот как я ее называю:

    Set arrayOfScenarios = returnAllStringsMatchingRegEx(fetchFileContent(oFile.Path), _ 
        "Scenario( Outline)?:((.+)(\n|\r|\r\n|$))+")

Для тВведенные выше данные, я ожидаю, что «arrayOfResults» будет иметь 3 элемента:

Первый элемент:

Сценарий: script1
Что-то дано
Когда что-то
что-то

Второй элемент:

Сценарий: сценарий2
Дано другое что-то
Когда другое что-то
Затем другое что-то

Третий элемент:

Краткое описание сценария: сценарий3 Дано еще одно что-то Когда еще что-то Затем еще одно что-то

Фактическим результатом является один элемент, содержащий:

Сценарий: сценарий1
Задано что-то
Когда что-то
Тогда что-то

@ optionTag
Сценарий: сценарий2
Дано другое что-то
Когда другоечто-то
потом еще что-то

набросок сценария: сценарий3
дано еще что-то
когда еще что-то
потом еще что-то

1 Ответ

0 голосов
/ 14 октября 2019

Вам просто нужно остановить свое регулярное выражение, когда оно увидит следующую строку "Сценарий".

^Scenario( Outline)?: ((.+)(\n|\r|\r\n|$))+(?!^Scenario)

Я перешел к https://regex101.com/ и вставил ваш текст и регулярное выражениеи это показало, что ваше регулярное выражение соответствует всему тексту. Пришлось напомнить себе о негативном взгляде . Затем применили подход, сопоставьте все, кроме тега, отмечающего следующую запись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...