Страницы: 1
RSS
Поиск совпадений в ячейках по массиву из регулярных выражений
 
Добрый вечер!

Гуру VBA, очень прошу помочь с одной задачей, которая заключается в следующем:
Есть определенный диапазон строк с текстом и есть строковый массив, в который я заключил 38 регулярных выражений.
Каким образом можно проверить поочередно каждую строку в диапазоне на совпадение по всем RegExp из массива?
Если в строке не находится совпадение по первой строке из массива regexp (1), то идет проверка по второй строке из массива regexp (2), если совпадение не найдено и там, то проверяется строка из массива regexp (3) и так далее, пока проверка не будет завершена по всем строкам из массива регулярных выражений (38 строк массива)
Если совпадение в искомой строке текста не будет совпадать ни с одним регулярным выражением, которые находятся в массиве из 38 строк, то вставляется значение " "

Файл-пример с текстом, в котором необходимо найти совпадения по массиву регулярных выражений и сам массив из регулярных выражений в модуле vba прикладываю.

То безобразие, которое, естественно, сейчас не работает, выглядит следующим образом:
Код
Public Function RegExpExtract(text As String, Pattern As String, Optional Item As Integer = 1) As String
    On Error GoTo ErrHandl
    Set regex = CreateObject("VBScript.RegExp")
    regex.Pattern = Pattern
    regex.Global = True
    If regex.Test(text) Then
        Set matches = regex.Execute(text)
        RegExpExtract = matches.Item(Item - 1)
        Exit Function
    End If
ErrHandl:
    RegExpExtract = CVErr(xlErrValue)
End Function

Function Test(Текст As String) As String

Dim TrueArray(1 To 38) As String

TrueArray(1) = "(^|\s)удовольствием\s(оценим|попробуем)"
TrueArray(2) = "(^)знать(\s)все(\s)отлично($)"
TrueArray(3) = "((в|под)ключ(ай|айте|и|им|ите|у|аю|аем)|добав(ляй|ляйте|ь|ьте|лю|им|ляю))"
TrueArray(4) = "(^|\s)((пре|)достав(ься|ь|ляя|ляй|ляйте|лять|ить|ляете|ляется|ляйтесь|ляем)|добавить|добавлять|добавляете|добавься|добавляется|добавляйтесь|добавка|сохранится|сохранишь|сохранять|сохранить|сохраняете|сохраня(ю|е)тся|подключ(а|и)ть|добавляем)"
TrueArray(5) = "((по|предо)ставь(|те)|храните|сохран(и|им|ите|яй|яйте|ю|яю|яя|яем|ятся)|пробу(ю|ем)|(надо|нужно|давай(|\s)|можно)\\sпопробоват(ь|))"
TrueArray(6) = "обнов(ляй|ляйте|лять|ляет(|ь)ся|и|им|ите|лю|ляю|ляем|ить)"
TrueArray(7) = "(согласен|согласна|соглашусь)"
TrueArray(8) = "(^|\s)уже\\sсогласил(ась|ся)"
TrueArray(9) = "ну(|\s|-ка\\s)давай(|те|тесь)"
TrueArray(10) = "ладно(|\\s)давай(|те)"
TrueArray(11) = "(^|\s)додават"
TrueArray(12) = "(^|\s)(задавайте|задавать)"
TrueArray(13) = "(^)надавать($)"
TrueArray(14) = "(^)стартовать($)"
TrueArray(15) = "(сохран(и|им|ите|яй|яйте|ю|яю|яя|ем)|пробу(ю|ем|й|йте)|(надо|нужно|давай(|\s)|можно)\sпопробоват(ь|))"
TrueArray(16) = "(храните|сохран(и|им|ите|яй|яйте|ю|яю|яя|ем|ятся)|пробу(ю|ем|й|йте)|(надо|нужно|давай(|\s)|можно)\sпопробоват(ь|))"
TrueArray(17) = "(согласен|согласна|соглашусь)"
TrueArray(18) = "(?=.*(^|\s)(хорошо|конечно))(?=.*(если\s(бесплатн|не(|\s)будет))).*"
TrueArray(19) = "хорошо(\s)спасибо"
TrueArray(20) = "хорошо(\s)хорошо"
TrueArray(21) = "(^|\s)я(\s)(говорю|сказал(|а))(\s)да(\s)(хорошо|давай)"
TrueArray(22) = "давай(|те)(\s)да"
TrueArray(23) = "(^|\s)хорошо"
TrueArray(24) = "(^)хорош($)"
TrueArray(25) = "(^|\s)конечно"
TrueArray(26) = "да(\s)я(\\s)не(\s)против"
TrueArray(27) = "не(\s)против(\s)да"
TrueArray(28) = "(^|\s)(сдалась|досдавать|сдавать)"
TrueArray(29) = "(?=.*(^|\s)(да|до|da|do))(?=.*(если\s(бесплатн|не(|\s)будет))).*"
TrueArray(30) = "(^|\s)(да|dada|dodo|дада|додо|да-да|да-да-да|конечно)"
TrueArray(31) = "(^|\s)guard"
TrueArray(32) = "(^)тасс($)"
TrueArray(33) = "(^|\s)давай(|те)$"
TrueArray(34) = "(^|\s)(добавляем|добавить|добавлять|добавляете|добавься|добавляется|добавляйтесь|добавка|сохранится|сохранишь|сохранять|сохранить|сохраняете|сохраня(ю|е)тся|подключ(а|и)ть)"
TrueArray(35) = "(^|\s)буд(у|ем)(\s)(пользоваться)"
TrueArray(36) = "(^|\s)(до|do)(\s|)(до|do)(\s|)свидан"
TrueArray(37) = "(^|\s)доставляйте"
TrueArray(38) = "(^|\s)вода"

i = RegExpExtract(Текст, TrueArray(30))

Test = i

End Function


Вместо явного указания индекса строки в массиве в операторе i я должен каким-то образом создать цикл перебора всех строк массива, пока не будет найдено первое совпадение из массива, но найти подходящую информацию в интернете мне не удалось (либо я её пропустил по незнанию)

Был бы очень благодарен за любую помощь.
 
Цитата
Алексей Краснов написал:
каким-то образом создать цикл перебора всех строк массива, пока не будет найдено первое совпадение из массива,
как-то так:
Скрытый текст
Соблюдение правил форума не освобождает от модераторского произвола
 
Спасибо большое!
Вы мне очень помогли  :)  
Страницы: 1
Наверх