vba - 在字符串中查找多个单词
问题描述
需要在Oracle中构建一个模拟REGEXP_INSTR
or的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'"; “因为是字符串中的完全匹配”。
解决方案
很可能不需要 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
推荐阅读
- gnuplot - Gnuplot 根据 Matrix 数据在极坐标中绘制 2D 热图
- latex - Latex 中数学方程的目录
- c# - C# 上的 System.Data 表数据类型修复
- webpack - 无效的选项对象。Image Minimizer Plugin 已使用与 API 架构不匹配的选项对象进行初始化
- python - 为数据帧的每一行获取字符串的第一部分
- docker - 如何使用 ansible 从不安全的 docker 注册表中提取?
- tableau-api - Tableau 作业的事件管理
- angular - 如果用户通过(shift + tab)聚焦在场外,如何防止调用聚焦方法
- python-3.x - TypeError:不可散列的类型:django中的'slice'
- python - 对象碰撞适用于右运动,但不适用于左运动