2013-01-24 131 views
2

我正在使用正則表達式在另一個字符串中搜索字符串模式的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 

回答

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|\()")

這給了你使用任何你想要的方式傳遞給函數,並不僅限於一個模式的靈活性...

+0

見隨訪上面 –

+0

@Downvoter的帖子:我不介意downvote,但至少有正派留下來評論你爲什麼感到需要downvote?或者要求太多? –

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

可以通過使用字符類改進正則表達式,例如'Regex.Pattern =「[。\ s]」+ str2srch +「[,\ s(]」' – robinCTS

相關問題