gpt4 book ai didi

vba - 如何在 Excel VBA 函数中允许通配符 * 在字符串中查找单词?

转载 作者:行者123 更新时间:2023-12-04 20:58:17 24 4
gpt4 key购买 nike

我有以下函数可以在字符串中查找单词,例如搜索 don 会找到 Don 而不是我想要的:
“我不认识唐,你觉得呢?”

然而,我也发现我需要寻找诸如种族、种族、赛车之类的词。我希望能够搜索 rac* 以涵盖所有此类变体,而不是搜索每个变体。

是否可以更新代码来做到这一点?或者有人有任何可以解决这个问题的代码吗?

  Function InStrExact(Start As Long, SourceText As String, WordToFind As String, _
Optional CaseSensitive As Boolean = False)

Dim x As Long, Str1 As String, Str2 As String, Pattern As String

If CaseSensitive Then
Str1 = SourceText
Str2 = WordToFind
Pattern = "[!A-Za-z0-9]"
Else
Str1 = UCase(SourceText)
Str2 = UCase(WordToFind)
Pattern = "[!A-Z0-9]"
End If

For x = Start To Len(Str1) - Len(Str2) + 1
If Mid(" " & Str1 & " ", x, Len(Str2) + 2) Like Pattern & Str2 & Pattern _
And Not Mid(Str1, x) Like Str2 & "'[" & Mid(Pattern, 3) & "*" Then
InStrExact = x
Exit Function
End If
Next
End Function

最佳答案

一个简单的修改是在搜索字符串的末尾添加一个通配符,并匹配原始字符串中的所有剩余字符。更改是替换此行:

If Mid(" " & Str1 & " ", x, Len(Str2) + 2) Like Pattern & Str2 & Pattern _

有了这个:
If Mid(" " & Str1 & " ", x) Like Pattern & Str2 & Pattern & "*" _

这只是消除了对要匹配的字符数的限制。如果将通配符添加到搜索词的末尾,则它位于尾随模式之前,因此允许任意数量的附加字符。如果搜索词中没有通配符,那么尾随模式仍然需要紧跟在搜索词之后,因此仍然需要完全匹配。

请注意,如果您要搜索的单词是最后一个单词并且您添加了通配符,则会出现问题。 Str2 的长度会导致函数过早停止搜索。所以完整的解决方案是也替换这一行:
 For x = Start To Len(Str1) - Len(Str2) + 1

有了这个:
 For x = Start To Len(Str1)

没有必要提前停止检查。

关于vba - 如何在 Excel VBA 函数中允许通配符 * 在字符串中查找单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42186187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com