2011-09-10 47 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()