Добрый вечер!
Гуру VBA, очень прошу помочь с одной задачей, которая заключается в следующем:
Есть определенный диапазон строк с текстом и есть строковый массив, в который я заключил 38 регулярных выражений.
Каким образом можно проверить поочередно каждую строку в диапазоне на совпадение по всем RegExp из массива?
Если в строке не находится совпадение по первой строке из массива regexp (1), то идет проверка по второй строке из массива regexp (2), если совпадение не найдено и там, то проверяется строка из массива regexp (3) и так далее, пока проверка не будет завершена по всем строкам из массива регулярных выражений (38 строк массива)
Если совпадение в искомой строке текста не будет совпадать ни с одним регулярным выражением, которые находятся в массиве из 38 строк, то вставляется значение " "
Файл-пример с текстом, в котором необходимо найти совпадения по массиву регулярных выражений и сам массив из регулярных выражений в модуле vba прикладываю.
То безобразие, которое, естественно, сейчас не работает, выглядит следующим образом:
Вместо явного указания индекса строки в массиве в операторе i я должен каким-то образом создать цикл перебора всех строк массива, пока не будет найдено первое совпадение из массива, но найти подходящую информацию в интернете мне не удалось (либо я её пропустил по незнанию)
Был бы очень благодарен за любую помощь.
Гуру 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 я должен каким-то образом создать цикл перебора всех строк массива, пока не будет найдено первое совпадение из массива, но найти подходящую информацию в интернете мне не удалось (либо я её пропустил по незнанию)
Был бы очень благодарен за любую помощь.