Ищите несколько слов в строке - PullRequest
1 голос
/ 07 октября 2019

Необходимо создать функцию VBA, которая имитирует REGEXP_INSTR или REGEXP_LIKE в Oracle. Они позволяют искать слова в строке без необходимости повторять слово за словом.

Я нашел этот код, который находит имена, начинающиеся с "Mr | Mrs | Ms | Dr", что означаетиспользуется как:

Function StringStarts(strCheck As String, options As String) As Boolean
    With CreateObject("VBScript.RegExp")
        .IgnoreCase = True
        .Pattern = "^(" & options & ")\.*\b"

        StringStarts = .Test(strCheck)
    End With
End Function
Debug.print StringStarts("Dr leopoldo malmeida", "Mr|Mrs|Ms|Dr")

На самом деле, мне нужна помощь, чтобы найти, можно ли изменить эту функцию, чтобы найти любое слово или части слов (сопоставление без учета регистра), вшаблон в любом месте строки для поиска. Например:

Debug.print StringStarts("Looking for multiple words", "Word|like|for")

Это должно вернуть true: «Слово найдено в« словах »»;msgstr "для полного совпадения в строке".

1 Ответ

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

Скорее всего, RegEx не нужен, потому что он немного медленный. Простой цикл for-each в функции будет в порядке:

Public Function PatternPresent(testedString As String, _
                                Optional pattern As String = "Mr|Mrs|Ms|Dr") As Boolean

    Const separator = "|"
    Dim patterns As Variant: patterns = Split(pattern, separator)
    Dim myVar As Variant

    For Each myVar In patterns
        If InStr(1, testedString, myVar) Then
            PatternPresent = True
            Exit Function
        End If
    Next myVar

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