Страницы: 1
RSS
Проверить наличие в тексте слов из списка
 
есть переменная OE_text в которую попадает какой-то текст, и в этом тексте необходимо искать слова, символы, которые я могу добавлять вручную. Думаю, нужно использовать регулярные выражения, но как не знаю, помогите пож-та. Вот часть кода, где я через запятую прописала поиск слов, но можно это одним шаблоном компактно сделать
Код
arr_OE = Array("Dining OE")
    For row = 2 To LastRow
            dummy = 0
        For Each col_name_OE In arr_OE
            If cols.Exists(LCase(col_name_OE)) Then
                col = cols(LCase(col_name_OE))
                OE_text = arr(row, col - 1)
                If Len(OE_text) < 4 Or InStr(OE_text, "?") Or InStr(OE_text, "Sorry") Or InStr(OE_text, "Your") Or InStr(OE_text, "dont") Or InStr(OE_text, "don't") Then
                    dummy = 1
                End If
            Else
я думала в случае, где нужно учесть одно и тоже слово, начинающееся либо с маленькой либо с большой буквы:
 
Обычно, когда используют InStr, то пишут так

Код
If InStr(1, OE_text, "Sorry", vbTextCompare) > 0

где 1 - это с какого символа начать сравнение
vbTextCompare - сравнивать как текст (не смотря на регистр)
> 0 - т.к. Instr - возвращает число

P.S. Можно и через Регулярные выражения, но надо знать ваши условия
Изменено: New - 01.04.2021 16:04:27
 
Цитата
l-lisa написал: искать слова, символы, которые я могу добавлять вручную.
Символы - еще куда ни шло, но регулярными проверять слова, которые могут быть какими угодно?
 
Вот так можно проверить, есть ли хоть одно слово из шаблона в строке:
Код
Function IsOneOfManyExists(sTxt$)
    Dim oRE As Object
    With CreateObject("vbscript.regexp")
        .ignorecase = True
        .MultiLine = True
        .Global = True
        .Pattern = "dont|don't|Sorry"
        IsOneOfManyExists = .test(sTxt)
    End With
End Function
слова разделять прямой чертой. Если заглавные и строчные буквы надо различать, то параметр ignorecase выставить в False.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
vikttur написал:
но регулярными проверять слова, которые могут быть какими угодно?
ну Вить, тут не согласен. Если есть набор слов и надо проверить есть ли хоть одно из них в строке - иногда регулярками проще и нагляднее. Но как всегда все зависит от задачи и условий.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Я понял так, что набора слов нет, слова могут меняться и быть любыми, отсюда и комментарий.
 
Спасибо,теперь бы разобраться как в код свой эту функцию прикрутить
 
Цитата
l-lisa написал:
как в код свой эту функцию прикрутить
Вы вообще сами код писали? Потому что сложности-то особой нет взять и использовать готовое решение :) Если речь про приложенный кусок, то наверное вместо этого:
Код
If Len(OE_text) < 4 Or InStr(OE_text, "?") Or InStr(OE_text, "Sorry") Or InStr(OE_text, "Your") Or InStr(OE_text, "dont") Or InStr(OE_text, "don't") Then
                    dummy = 1
                End If
записать так:
Код
If Len(OE_text) < 4 Or IsOneOfManyExists(OE_text) Then
                    dummy = 1
                End If

ну и функцию тоже можно адаптировать под разные слова - передавать как параметр набор искомых слов:
Код
Function IsOneOfManyExists(sTxt$, sWords$)
    Dim oRE As Object
    With CreateObject("vbscript.regexp")
        .ignorecase = True
        .MultiLine = True
        .Global = True
        .Pattern = sWords
        IsOneOfManyExists = .test(sTxt)
    End With
End Function
тогда и вызов изменится:
Код
If Len(OE_text) < 4 Or IsOneOfManyExists(OE_text, "\?|Sorry|Your|dont|don't") Then
                    dummy = 1
                End If
обращаю внимание на обратный слеш перед вопр.знаком - Вы должны хорошо ориентироваться в регулярных выражениях и его синтаксисе. Вопр.знак - спец.символ и чтобы он не считался таковых, а искался именно вопр.знак необходимо его "обесценить" обратным слешем.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
Вы вообще сами код писали?
нет
Изменено: l-lisa - 02.04.2021 11:07:03
Страницы: 1
Наверх