2017-02-27 22 views
1

我是新來的正則表達式,我試圖捕捉一系列使用模式的關鍵值對。我期待捕捉到的值都配有鑰匙,一行行,用「=」作爲分隔符:VBA正則表達式值對

Field1  = value1 
Field2  = value2 
Field3  = value3 

然而,值可以是複雜的字符串,例如:

123 @ example.com

ABC- DET - FLP

VCN:20161115:74055:5

99.70

我在VBA中實現這顯然不支持正則表達式「lookbehind」。

有人能幫助我定義一個正則表達式來捕捉,我用下面的方式工作的值(可惜不因爲回顧後的運行):(?<=\=\s).+

非常感謝

+1

也許'斯普利特(文字, 「=」,2,1)'就足夠了這裏,然後就得到了第二個元素。如果你需要一個正則表達式,它會是'= \ s *(。+)',然後抓住'SubMatches(0) –

回答

2

你可以試試:

\w+\s*=\s*(\S+) 

其中將考慮的=周圍的白色空間和捕捉對的右手邊。

代碼示例:

Option Explicit 

Sub Test() 

    Dim objRegex As RegExp 
    Dim objMatches As MatchCollection 
    Dim varTests As Variant 
    Dim varTest As Variant 
    Dim strTest As String 

    Set objRegex = New RegExp 
    objRegex.Pattern = "\w+\s*=(\S+)" 

    varTests = Array("Field1=value1", _ 
     "[email protected]", _ 
     "Field1=abc- det - FLP", _ 
     "Field1=VCN:20161115:74055:5", _ 
     "Field1=123=456=789", _ 
     "Field1=99.70") 

    For Each varTest In varTests 
     If objRegex.Test(CStr(varTest)) Then 
      Set objMatches = objRegex.Execute(CStr(varTest)) 
      strTest = "Matched: " & objMatches(0).SubMatches(0) 
     Else 
      strTest = "No match: " & CStr(varTest) 
     End If 
     Debug.Print strTest 
    Next 

End Sub