3

我正在研究一个 vba 宏,它使用正则表达式在另一个字符串中搜索字符串模式。

正则表达式模式包括一个不同的字符串(下面代码中的 APR24)。我需要知道如何在模式中包含一个变量。任何人都可以帮忙。

我的代码如下

Public Function Regexsrch(ByVal str2bsrchd As String, ByVal str2srch As String) As Boolean
Dim Regex As New VBScript_RegExp_55.RegExp
Dim matches, s
Regex.Pattern = "(\.|\s)APR24(,|\s|\()"
Regex.IgnoreCase = True
    If Regex.Test(str2bsrchd) Then
         Regexsrch = True
Else
        Regexsrch = False
End If
End Function
4

2 回答 2

4

那么 str2srch 是“APR24”还是一些变体?如果是这种情况,您只需使用连接来构建您的模式字符串。

Public Function Regexsrch(ByVal str2bsrchd As String, ByVal str2srch As String) As Boolean
Dim Regex As New VBScript_RegExp_55.RegExp
Dim matches, s
Regex.Pattern = "(\.|\s)" + str2srch + "(,|\s|\()"
Regex.IgnoreCase = True
    If Regex.Test(str2bsrchd) Then
         Regexsrch = True
Else
        Regexsrch = False
End If
End Function
于 2013-01-24T23:13:49.103 回答
1

您可以指定您想要的任何模式str2srch,然后将其分配给Regex.Pattern

例如

Sub Sample()
    Debug.Print Regexsrch("APR24ddd", "APR24")  '<~~ Returns True
    Debug.Print Regexsrch("APR277ddd", "APR24") '<~~ Returns False
End Sub

Public Function Regexsrch(ByVal str2bsrchd As String, ByVal str2srch As String) As Boolean
    Dim Regex As New VBScript_RegExp_55.RegExp
    Dim matches, s

    Regex.Pattern = str2srch
    Regex.IgnoreCase = True

    If Regex.Test(str2bsrchd) Then
         Regexsrch = True
    Else
        Regexsrch = False
    End If
End Function

跟进

即使它是动态的,您也可以始终将模式传递为

Debug.Print Regexsrch("APR24ddd", "(\.|\s)" & VARIABLE & "(,|\s|\()").

这使您可以灵活地使用要传递给函数的任何模式,并且您不仅限于一种模式...

于 2013-01-24T23:05:51.400 回答