首页 > 解决方案 > 在字符串中查找多个单词

问题描述

需要在Oracle中构建一个模拟REGEXP_INSTRor的VBA 函数。REGEXP_LIKE这些可以在字符串中查找单词而不必逐字循环。

我找到了这段代码,它找到了以“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: "Word found in 'words'"; “因为是字符串中的完全匹配”。

标签: vba

解决方案


很可能不需要 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

推荐阅读