Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Вызов массива регулярных выражений в VBA из БД Postgres, VBA + SQL
 
Добрый день!

У меня есть скрипт для анализа текстовых массивов, работающий на регулярных выражениях. Разные части определенного текста последовательно проверяются на совпадения с разными типами массивов регулярных выражений.
Массивов регулярных выражений несколько, они разделены по типам, в каждом массиве может находится до 1500 регулярных выражений.

Вызываются они в скрипте следующим образом:
Код
Private Function good_bye(ByVal call_transcript As String) As String

    Static RE As Object, GoodByeArray
    Dim i As Byte

    If IsArray(GoodByeArray) Then GoTo work

        Set RE = CreateObject("VBScript.RegExp")
        RE.Global = True
        ReDim GoodByeArray(1 To 11)

        GoodByeArray(1) = "(^|\s)(чего|всего)(\s|)(доброго|хорошего)"
        GoodByeArray(2) = "(^|\s)до(\s|)свидан"
        GoodByeArray(3) = "^(до(|\s)сида)$"
        GoodByeArray(4) = "все(\s)добро($)"
        GoodByeArray(5) = "до(|\s)свида"
        GoodByeArray(6) = "(^|\s)свидани[яе]($|\s)"
        GoodByeArray(7) = "всего(\s)(добр|хорош)"
        GoodByeArray(8) = "зачес(\s)ивана"
        GoodByeArray(9) = "всех(\s)благ"
        GoodByeArray(10) = "хорошего.{0,6}(\s)(дня|вечер)"
        GoodByeArray(11) = "доброй.{0,6}(\s)ночи"


work:
       For i = 1 To 11
          RE.Pattern = GoodByeArray(i)
          If RE.test(call_transcript) Then good_bye = RE.Execute(call_transcript)(0): Exit For
       Next i

End Function
Текущая схема довольно топорная, так как при необходимости добавления новых регулярных выражений/удаления старых/редактирования - необходимо лезть в код и редактировать это там. Так как скрипт используется несколькими людьми, при любых изменениях у одного человека, ему необходимо оповестить об этом другого, что вызывает очень большой дискомфорт, так как изменений в коде может быть довольно много за короткий промежуток времени.

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

Я отдаленно понимаю, как мне бросить заброс в бд и даже понимаю как мне его потом выгрузить на лист чем-то вроде следующего кода:

Код
    query_v2 = "запрос"

    Set conn = CreateObject("ADODB.Connection")
    
        strCnx = "Driver={PostgreSQL UNICODE(x64)};Server=адрес;Port=порт;Database=бдl;Uid=логин;Pwd=пароль"
        conn.Open strCnx

    'Бросаем запрос в базу
    Set rs = CreateObject("ADODB.recordset")
        rs.Open query_v2, conn
        'Получаем список записей из бд
        record = rs.GetRows()
        'Обрываем подключение
        rs.Close
        conn.Close
    
    For Each item In record
      Range("A" & count) = item
      count = count + 1
    Next
Но как мне перебирать регулярные выражения, которые находятся в таблице БД, нет идей совсем.
Заранее спасибо  8-0  
VBA: Ошибка при использовании массива регулярных выражений
 
Цитата
New написал:
2. У вас ошибка в строке
Спасибо большое, буду разбираться!

Цитата
New написал:
Если функция будет возвращать "" (строку нулевой длины), то вы не будете видеть вообще в каких ячейках на листе у вас функция и к прочие неудобства
У меня эта функция используется в одном огромном костыле, который исходя из результатов работы этой функции должен переходить к следующему If.
Если функция возвращает ошибку, то тогда условие не срабатывает :/
К сожалению, пока у меня не хватает опыта писать функции без костылей, поэтому приходится довольствоваться тем, что есть.
VBA: Ошибка при использовании массива регулярных выражений
 
Добрый вечер!
Гуру VBA, подскажите, пожалуйста, как исправить проблему в коде.

У меня есть массив регулярных выражений, по которому необходимо произвести проверку текста.
В том случае, если совпадение по массиву не найдено, функция должна возвращать пустое значение (""), однако она возвращает ошибку #ЗНАЧ!
Ломаю голову и не могу понять, что и где в функции указано не так.

Файл-пример с ячейками, которые необходимо проверить по массиву и функцию прикладываю.

Функция:
Код
Public Function Test22(Текст As String) As String

Dim FalseArray(1 To 142) As String

FalseArray(1) = "(\s|^)завтра\sточно\sбуд(е|у)т"
FalseArray(2) = "(?=.*(хорошо|конечно|обязательн|естественн|((|о|за|до|вы)пл[ао](чу|тим)|внес(у|ем)|пога(шу|сим)|закро(ю|ем)|закин(у|ем))))(?=.*(в\sч(е|ё)м))(?=.*(вопрос|проблема)).*"
FalseArray(3) = "уровне(\s)было(\s)привычки"
FalseArray(4) = "(^|\s)(сейчас|уже)(\s)(собира(юсь|емся))"
FalseArray(5) = "(?=.*(((|о|за|до|вы)пл[ао](чу|тим)|внес(у|ем)|пога(шу|сим)|закро(ю|ем)|закин(у|ем))))(?=.*((^|\s)до(\s)(|\d(\s))вечера)).*"
FalseArray(6) = "(?=.*(((|о|за|до|вы)пл[ао](чу|тим)|внес(у|ем)|пога(шу|сим)|закро(ю|ем)|закин(у|ем))))(?=.*((^|\s)до(\s)(\d)(|\s)часов)).*"
FalseArray(7) = "сейчас(\s)((|о|за|до|вы)пл[ао](чу|тим)|внес(у|ем)|пога(шу|сим)|закро(ю|ем)|закин(у|ем))"
FalseArray(8) = "((|о|за|до|вы)пл[ао](чу|тим)|внес(у|ем)|пога(шу|сим)|закро(ю|ем)|закин(у|ем))(\s)(|(точно|прям(|о))(\s))сейчас"
FalseArray(9) = "успе(ю|ем|ваю|ваем)"
FalseArray(10) = "час(а|ика)(\s)через(\s)\d"
FalseArray(11) = "(через|течени[еи])(\s)(\d|пар(у|а|ы))(\s)час(ов|иков)"
FalseArray(12) = "через(\s)(несколько|пару)(\s)час(ов|иков)"
FalseArray(13) = "сегодня\s(прям|вот)\s(за|)кину"
FalseArray(14) = "через(\s)час($|\s)"
FalseArray(15) = "через(\s)(\d)(\s)час(ов|а)($|\s)"
FalseArray(16) = "(^)в(\s)течени[еи](\s)дня($)"
FalseArray(17) = "(?=.*(сейчас|сегодня))(?=.*(пл[ао]тит|внесет|пополнит|закроет)).*"
FalseArray(18) = "(?=.*(завтра))(?=.*(пл[ао]тит|внесет|пополнит|закроет)).*"
FalseArray(19) = "(?=.*(сегодня|сейчас))(?=.*(((|о|за|до|вы)пл[ао](чу|тим)|внес(у|ем)|пога(шу|сим)|закро(ю|ем)|закин(у|ем)))).*"
FalseArray(20) = "(^)даже(\s)сегодня($)"
FalseArray(21) = "(^)сегодня(\s)даже($)"
FalseArray(22) = "(^)точно(\s)(сегодня)($)"
FalseArray(23) = "(^)точно(\s)(завтра)($)"
FalseArray(24) = "(^)(завтра)(\s)точно($)"
FalseArray(25) = "(^)(сегодня)(\s)точно($)"
FalseArray(26) = "гоняю(\s)сегодня"
FalseArray(27) = "ананас(\s)захар"
FalseArray(28) = "(^)сезон($)"
FalseArray(29) = "(^)(|я(\s))сегодня(\s)получу($)"
FalseArray(30) = "(^)(|я(\s))получу(\s)сегодня($)"
FalseArray(31) = "(^)сегодня(\s)против($)"
FalseArray(32) = "(?=.*(смо(гу|жем)))(?=.*(платит|плачиват|вн[ео]с(|и)т|гасит|закрыт)).*"
FalseArray(33) = "(^|\s)да(\s)точно"
FalseArray(34) = "(^)да(\s)почему($)"
FalseArray(35) = "(?=.*(сегодня|завтра|утром|после(\s)обеда))(?=.*(пла(ч|тим))).*"
FalseArray(36) = "(?=.*((^|\s)(до|к)(\s)(6|шест[ьи]|18|восемнадцати)($|\s)))(?=.*((((?<!(не(\s)))(могу|можем))|((?<!(не(\s)))(смогу|сможем)))))(?=.*((|о|за|до|вы)пл[ао]тить|внести|погасит|закро(ю|ем)|закин(у|ем)|закончу)).*"
FalseArray(37) = "(?=.*((^|\s)(до|к)(\s)(6|шест[ьи]|18|восемнадцати)($|\s)))(?=.*((|о|за|до|вы)пл[ао](чу|тим)|внес(у|ем)|пога(шу|сим)|закро(ю|ем)|закин(у|ем)|закончу)).*"
FalseArray(38) = "(?=.*(попадет|попадут))(?=.*(сейчас|через.{1,6}минут))(?=.*(деньги|денежк)).*"
FalseArray(39) = "(завтра|сегодня)(\s)(обязательн|конечн|естествен|хорошо)"
FalseArray(40) = "(обязательно|конечно|естествено|хорошо|укоренение)(\s)(завтра|сегодня)($|\s)"
FalseArray(41) = "(^)сегодня(\s)хочешь($)"
FalseArray(42) = "сегодня(\s)(|даже(\s))(хо(чу|тим|тел)|собира(юсь|емся|лся|лись|)|намерен|планир)"
FalseArray(43) = "(хо(чу|тим|тел(|и))|собира(юсь|емся|лся|лись)|намерен(|ы)|планир(ую|ем|овал(|и)))(\s)(|даже(\s))сегодня"
FalseArray(44) = "сегодня(\s)отучила"
FalseArray(45) = "(?=.*(завтра|сегодня|сейчас))(?=.*(?<!(не(\s)))(буду(\s)(оплачив|платит|пополнят|вносит|гасить|погашат))).*"
FalseArray(46) = "(?=.*(сегодня|завтра|сейчас))(?=.*(^|\s)((жена)($|\s)|муж($|\s)|сестр|брат($|\s)|супруг|сын($|\s)|(доч|мат)(ь)($|\s)|дочк|родственни|з[оа]ловк|отец|папа($|\s)))(?=.*((|о|за|до|вы)пл[ао]т[ия]т|внес[уе]т|погас[ия]т|закро[юе]т|закин[уе]т|плач[еу]т)).*$"
FalseArray(47) = "(?=.*(если(\s)успею).{0,12}(вечером|сегодня)|если(\s)(вечером|сегодня)(\s).{0,12}(вечером|сегодня))(?=.*(если(\s)нет(\s).{0,12}завтра)).*"
FalseArray(48) = "(?=.*(завтра|сегодня|сейчас))(?=.*(^|\s)((ма(ма|ть|чеха)|отец|з[оа]ловка|папа|отчим|дочь|сын|муж|жена|свекровь|свекруха|свекр|супруг(|а)|брат|сестра|вну(к|чка)|родственн(ик|ица)|куз(ен|ина)))($|\s))(?=.*(((|о|за|до|вы)пл[ао]т[ия]т|внес[еу]т)|погас[ия]т)|закро[юе]т|закин[уе]т).*"
FalseArray(49) = "(^)(|ну(\s))(завтра|сегодня|сейчас)($)"
FalseArray(50) = "(?=.*(сегодня|завтра))(?=.*(^|\s)(до(\s)\d)).*"
FalseArray(51) = "(?=.*(сегодня|завтра|сейчас))(?=.*(((|с)мо(гу|жем))(\s)((|о|за|до|вы)пл[ао]тить|внести|погасить|закрыть|(|за)кинуть|пополнить))).*"
FalseArray(52) = "(?=.*(наверно|возможно|скоре[ей](\s)всего|вероятно|я(\s)думаю))(?=.*(сегодня|(^|\s)завтра)).*"
FalseArray(53) = "(?=.*(сейчас|сегодня|завтра))(?=.*(буд[уе]т(\s)((|о)плата|платеж|взнос))).*"
FalseArray(54) = "(?=.*(завтра))(?=.*(сегодня.{0,12}(на(\s)работе|работаю))).*"
FalseArray(55) = "(?=.*(сегодня|завтра))(?=.*(получится|поищу|получил(ось|ся|ась)))"
FalseArray(56) = "(?=.*(плат[аы]|платеж|взнос))(?=.*(сегодня|завтра))(?=.*(буд[еу]т)).*"
FalseArray(57) = "(завтра|сегодня)(\s)в(\s)течени[еи](\s)дня*"
FalseArray(58) = "сегодня(\s)здесь"
FalseArray(59) = "(завтра|сегодня)(\s)да($|\s)"
FalseArray(60) = "(^|\s)да(\s)(завтра|сегодня)"
FalseArray(61) = "(?=.*(сегодня))(?=.*(позже|позднее|потом))"
FalseArray(62) = "(^)(завтра|сегодня)(\s)(днем|утром|с(\s)утра|вечером|в(\s)обед|до(\s)обеда|до(\s)вечера)($)"
FalseArray(63) = "(^)(|я(\s))(сегодня|завтра)(\s)получил($)"
FalseArray(64) = "(?=.*(пойд(у|ем)|ид(у|ем)|ед(у|ем)))(?=.*(сегодня|завтра)).*"
FalseArray(65) = "(сегодня|завтра)(\s)оплачен"
FalseArray(66) = "оплачен(\s)(сегодня|завтра)"
FalseArray(67) = "(^)(мы|я)(\s)(сегодня|завтра)(\s)оплатить($)"
FalseArray(68) = "(^)(мы|я)(\s)оплатить(\s)(сегодня|завтра)($)"
FalseArray(69) = "(сегодня|завтра)(\s)(платье|плачет)"
FalseArray(70) = "(^)пойдешь($)"
FalseArray(71) = "сегодня(\s)потискать"
FalseArray(72) = "(?=.*(конечно|хорошо|обязательн|естествен|(((|о|за|до|вы)пл[ао](чу|тим)|внес(у|ем)|пога(шу|сим)|закро(ю|ем)|закин(у|ем)))))(?=.*((\s|^)(просроч(е|)к|(за|)дол[гж].{1,10})))(?=.*(никогда|не\sбыл|((\s|^)нет(\s|$)))).*"
FalseArray(73) = "сегодня(\s)или(\s)(|(утром|вечером)(\s))завтра"
FalseArray(74) = "завтра(\s)или(\s)сегодня"
FalseArray(75) = "(^)((должен|должны)(|\s)){1,}($)"
FalseArray(76) = "(?=.*((^|\s)уже(\s)(ответил(|а))))(?=.*((|о|за|до|вы)пл[ао](чу|тим)|внес(у|ем)|пога(шу|сим)|закро(ю|ем)|закин(у|ем))).*"
FalseArray(77) = "(?=.*(сейчас|(^|\s)уже($|\s)))(?=.*(плачу|оплачиваю)).*"
FalseArray(78) = "(?=.*(выезжаю))(?=.*(платит|оплач|гасить|погаш|пополн|закры(|ва)т)).*"
FalseArray(79) = "(^)да(\s)при(\s)чем($)"
FalseArray(80) = "darixmaga(\s)область"
FalseArray(81) = "после(\s)работы(\s)лежу"
FalseArray(82) = "сейчас.{0,8}собира(юсь|емся)"
FalseArray(83) = "собира(юсь|емся).{0,8}идти"
FalseArray(84) = "(^|\s)когда(\s)(я|мы)(\s)не(\s)((о|вы|)пла(тил|чивал))"
FalseArray(85) = "(^|\s)когда(\s)(я|мы)(\s)не(\s)оплатил"
FalseArray(86) = "курседон(\s)(оплачен)"
FalseArray(87) = "после(\s)обеда"
FalseArray(88) = "утром"
FalseArray(89) = "(^|\s)с(\s)утра"
FalseArray(90) = "(?=.*((^|\s)не(\s)сегодня))(?=.*(позже|позднее))"
FalseArray(91) = "(?=.*(хорошо|конечно|обязательн|естественн|((|о|за|до|вы)пл[ао](чу|тим)|внес(у|ем)|пога(шу|сим)|закро(ю|ем)|закин(у|ем))))(?=.*до(\s)6(\s)часов)"
FalseArray(92) = "(?<!(не(\s)))прям(|о)(\s)сейчас"
FalseArray(93) = "сейчас(\s)прям(|о)($|\s)"
FalseArray(94) = "(?=.*(постара(юсь|емся)|попробу(ю|ем)))(?=.*(|о|за|до)пла(тить|чу|тим|тит|тят)|(|о|за|до)пл[ао](тить|чу|тим|тит|тят|и|ите)|(о|за|до)пла(чивать|чиваю|чиваем|чивает|чивают|чиваете)|внос(ить|им|ит|ят|ите|и)|внес(ти|у|ем|ет)|вношу|(|по)гас(ить|им|ит|ят)|(|по)гаш(у|ать)|закр(ою|оем|ывать|ыть|ыт|оет|оют|ете))"
FalseArray(95) = "(^|\s)постараюсь($|\s)"
FalseArray(96) = "(^|\s)постарайся($|\s)"
FalseArray(97) = "постара(юсь|емся)"
FalseArray(98) = "(?=.*(уже))(?=.*(звонил)).*"
FalseArray(99) = "(?=.*(хватит|перестань))(?=.*(напоминать)).*"
FalseArray(100) = "принял(|а|и)(\s)во(\s)внимание"
FalseArray(101) = "при(му|мем)(\s)во(\s)внимание"
FalseArray(102) = "(\s|^)не\s(беспокойтесь|переживайте)(\s|$)"
FalseArray(103) = "респект(\s)является(\s)полдник"
FalseArray(104) = "накру(чу|тим)"
FalseArray(105) = "(\s|^)(за|вы|о)плачу|внесу|закрою|погашу|запл[оа]тим"
FalseArray(106) = "((|о|за|до|вы)пл[ао](чу|тим)|внес(у|ем)|пога(шу|сим)|закро(ю|ем)|закин(у|ем))"
FalseArray(107) = "(?<!не)(сдела(ю|ем)|выполн(ю|ем)|провед(у|ем)|произвед(у|ем)).{1,10}(платеж|средств|деньг|(|д)оплат)"
FalseArray(108) = "(платеж|средств|деньг|(|д)оплат).{1,10}(?<!не)(сдела(ю|ем)|выполн(ю|ем)|провед(у|ем)|произвед(у|ем))"
FalseArray(109) = "(^|\s)(уже\sзакидыва(ю|й))(\s|$)"
FalseArray(110) = "долго(\s)закончил"
FalseArray(111) = "докучный"
FalseArray(112) = "jabber(\s)кучу"
FalseArray(113) = "(?=.*(буд[уе]т(\s)(|о)плата|платеж|взнос)).*"
FalseArray(114) = "билет(\s)на(\s)матч"
FalseArray(115) = "(?=.*((^|\s)уже($|\s)|сейчас))(?=.*(подхожу)).*"
FalseArray(116) = "(^)новая(\s)понял(|а)($)"
FalseArray(117) = "(^)оплатить(\s)можно($)"
FalseArray(118) = "(?=.*(пойд(у|ем)|ид(у|ем)|ед(у|ем)))(?=.*(платит|оплач|вносит|пополня|закидыв)).*"
FalseArray(119) = "(?=.*(конечно|хорошо|обязательн|(((|о|за|до|вы)пл[ао](чу|тим)|внес(у|ем)|пога(шу|сим)|закро(ю|ем)|закин(у|ем)))))(?=.*((\s|^)(вовремя|в\sсрок)(\s|$)))(?=.*(внес|внош|пла[тч]))"
FalseArray(120) = "ном(\s)уровне"
FalseArray(121) = "(^)на(\s)дачу($)"
FalseArray(122) = "(?=.*((нет|не(\s)было)(\s)просроч|просроч(|е)к(|и)(\s)(нет|не(\s)был)|наши(\s)так(\s)хочет))(?=.*(хорошо|конечно|естествен|обязательн)).*"
FalseArray(123) = "сегодня(\s)вечером"
FalseArray(124) = "((завтра|сегодня|сейчас)(\s)да(|м))"
FalseArray(125) = "(^|\s)(да(|м)(\s)(завтра|сегодня|сейчас))"
FalseArray(126) = "(?=.*(?<!(не(\s)))(сегодня|завтра))(?=.*((^|\s)в(\s)течени)).*"
FalseArray(127) = "сегодня(\s)зарплат"
FalseArray(128) = "зарплата(\s)сегодня"
FalseArray(129) = "получил(ось|ся)(\s)(завтра|сегодня)"
FalseArray(130) = "(^)(|в)несу($)"
FalseArray(131) = "(^)доработать($)"
FalseArray(132) = "(^)(мы|я)(\s)сегодня($)"
FalseArray(133) = "(^|\s)сегодня\sзаплатят"
FalseArray(134) = "(^)тетрадь($)"
FalseArray(135) = "завтра(\s)как(\s)раз"
FalseArray(136) = "сегодня(\s)как(\s)раз"
FalseArray(137) = "под\sконтролем"
FalseArray(138) = "(\s|^)(зна(ю|ем)|помн(ю|им))(\s|$)"
FalseArray(139) = "(^)да(\s)во(\s)время($)"
FalseArray(140) = "(\s|^)(в\sкурсе)(\s|$)"
FalseArray(141) = "(?=.*(спасибо))(?=.*(напоминани|предупреждени)).*"
FalseArray(142) = "(^)мы(\s)должны(\s)картины($)"

S = ""

    With CreateObject("VBScript.RegExp")
    .Global = True
        For i = 1 To 142
            .Pattern = FalseArray(i)
            If .Test(Текст) Then S = .Execute(Текст)(0): Exit For
        Next i
    End With
    
Test22 = S

End Function
Обход ошибок в VBA при вызове функции
 
doober, огромное вам спасибо!
Обход ошибок в VBA при вызове функции
 
Добрый вечер!

Столкнулся с проблемой - имеются ячейки, из которых функцией извлекается предпоследнее вхождение текста после определенного делителя "Human".
В том случае, если функция не находит подходящих значений, она возвращает #ЗНАЧ!, который мешает работе остальных функций, которые используют ссылки на эту.

Необходимо результат #ЗНАЧ! при вызове функции заменить на пустое значение ""
Долго гуглил информацию по поводу обхода ошибок с помощью CVErr(xlErrValue)/Application.Function.Iserror, но не получается ими правильно воспользоваться.

Сам код:
Код
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 ПолучитьПредпоследнийHuman As String

    РазделитьТекст = Split(Текст, "Human:", , vbTextCompare)
    ПосчитатьHuman = UBound(РазделитьТекст)
    ПолучитьПредпоследнийHuman = РазделитьТекст(ПосчитатьHuman - 2)
    ПоискПоRegExp = Trim(RegExpExtract(ПолучитьПредпоследнийHuman, "\s.*."))
    ПовторныйДелитель = Split(ПоискПоRegExp, "Bot:", , vbTextCompare)
    
    Test = ПовторныйДелитель(0)

End Function


Был бы очень благодарен за помощь с объяснением того, как правильно необходимо отлавливать подобные ошибки в функции.
Файл-пример прикладываю.
Поиск совпадений в ячейках по массиву из регулярных выражений
 
Спасибо большое!
Вы мне очень помогли  :)  
Поиск совпадений в ячейках по массиву из регулярных выражений
 
Добрый вечер!

Гуру 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
Наверх