2011-09-10 51 views
0

使用VB.NET,有沒有辦法在1步驟中執行此RegEx調用...而不是2-3?使用vb.net和RegEx查找嵌套字符串中的字符串

我試圖找到單詞「賓果」,或任何之間的開始和結束的話,但 然後還內部的FISH和CAKES的話。我的最終結果應該只是「賓果」。

Dim s1 As String = "START (random string) FISH bingo CAKES (random string) END" 

Dim m As Match 

m = RegEx.Match(s1, "START\w*END") 
If (m.Success) Then 
    Dim s2 As String = m.Groups(0).ToString() 
    m = RegEx.Match(s2, "FISH\w*CAKES") 
    if(m.Success) then 
     s2 = m.Groups(0).ToString() 
     m = RegEx.Match(s2, "bingo") 
     s2 = m.Group(0).ToString() 
    End If 
End If 

回答

1

不確定VB.NET,但你可以趕上內「賓果」使用下面的正則表達式:

START.*FISH.*(bingo).*CAKES.*END 

「賓果」會那麼第一個(也是唯一的)比賽這個表達。

0

您可以使用前瞻和回顧後:

Dim s1 As String = "START (random string) FISH bingo CAKES (random string) END" 
Dim m As Match = RegEx.Match(s1, "(?<=\bSTART\b.*?\bFISH\s+)\w+(?=\s+CAKES\b.*?\bEND\b)") 
Dim s2 as String = m.Value() 

但我認爲這是簡單的使用捕獲組爲@Alaudo建議:

Dim m As Match = RegEx.Match(s1, "\bSTART\b.*?\bFISH\s+(\w+)\s+CAKES\b.*?\bEND\b") 
Dim s2 as String = m.Groups(1).Value()