我正在研究一个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
答案 0 :(得分:3)
那么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
答案 1 :(得分: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|\()")
。
这使您可以灵活地使用您希望传递给函数的任何模式,并且您不仅限于一种模式......