Использование vb.net и RegEx для поиска строки во вложенной строке - PullRequest
0 голосов
/ 10 сентября 2011

Используя VB.NET, есть ли способ сделать этот вызов RegEx за 1 шаг ... вместо 2-3?

Я пытаюсь найти слово "бинго" или что-то ещемежду словами START и END, но также и внутри слов 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

Ответы [ 2 ]

1 голос
/ 10 сентября 2011

Не уверен насчет VB.NET, но вы можете поймать внутреннее «бинго», используя следующий RegExp:

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

«Бинго» будет первым (и единственным) совпадением этого выражения.

0 голосов
/ 10 сентября 2011

Вы можете использовать lookahead и lookbehind:

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()
...