Поиск в сложной строке

#vb.net #string #search

#vb.net #строка #Поиск

Вопрос:

Я ищу способ поиска в этой строке информации.

 <a href="CLSID/70545-GoogleToolbar_32_dll.html">Google Side Bar</a></td><td>GoogleToolbar_32.dll</td>
  

Я могу выполнить поиск по ключевому слову

 <td>GoogleToolbar_32.dll</td>
  

Оттуда мне нужно получить фразу «CLSID/70545-GoogleToolbar_32_dll.html «. Моя идея состояла в том, чтобы выполнить поиск в обратном направлении, чтобы найти следующий встречающийся «a href», искать до конечной кавычки. Но я просто не могу понять, как это сделать.

Комментарии:

1. Похоже, вы пытаетесь разобрать HTML. Взгляните на CsQuery .

Ответ №1:

Если это одноразовая вещь или вы знаете, что форматирование будет последовательным, вы могли бы использовать регулярное выражение. Приведенный ниже пример выполнит то, что вы просили. Это не особенно надежно, но для вашего примера сработает. Регулярные выражения — это не то, что вы хотите использовать для синтаксического анализа языков разметки в целом. Как сказал Neolisk, вы можете захотеть заглянуть в библиотеку синтаксического анализа.

 Imports System.Text.RegularExpressions

Module Module1

   Sub Main()

      Dim html As String = "<html><body><table><tr><td><a href=""CLSID/70545-GoogleToolbar_32_dll.html"">Google Side Bar</a></td><td>GoogleToolbar_32.dll</td></tr></table></body></html>"
      Debug.WriteLine(GetClsId(html))

   End Sub

   Function GetClsId(html As String) As String
      Const rx As String = "<a href=""(?<clsid>.*)"">.*<td>GoogleToolbar_32.dll</td>"
      Dim m As Match

      m = Regex.Match(html, rx)
      If m.Success Then
         Return m.Groups.Item("clsid").Value
      Else
         Return Nothing
      End If

   End Function

End Module