使用正则表达式在多行之间抓取文本

时间:2013-01-22 18:49:02

标签: regex vb.net

我正试图抓住这个HTML页面代码中标记之前的Juwelier一词。

我对RegEx不太满意,特别是在多行使用它时。 那些不会动态的东西:

  • <p>Rubriek:
  • class="category"
  • 并且当然是html标签,例如<p> , </p> , <a> , </a>

这是HTML页面代码

    <p>Rubriek: 

      <a href="http://www.detelefoongids.nl/juwelier/4-1/?oWhat=Juwelier"
         title="Juwelier"
         class="category">
           Juwelier
      </a>
   </p>

1 个答案:

答案 0 :(得分:0)

以下正则表达式是您可以使用的众多之一 它使用零宽度正面后视(?<=)和前瞻(?=)断言来定位目标字符串。

Dim str As String = _
"<p>Rubriek:" & vbCrLf &
"  <a href=""http://www.detelefoongids.nl/juwelier/4-1/?oWhat=Juwelier""" & vbCrLf &
"     title = ""Juwelier""" & vbCrLf &
"     class=""category"">" & vbCrLf &
"       Juwelier" & vbCrLf &
"  </a>" & vbCrLf &
"</p>"

Dim match As Match = Regex.Match(str, _
    "(?<=<p>Rubriek:[^>]+?class=""category"">\W*)\w+(?=\W*</a>)")

If (match.Success) Then
    MsgBox(match.Value)
End If

虽然上面没有使用,但是在尝试匹配多行时要记住的一件重要事情是,如果要使用通配符元字符.,则使用单行模式,以便它匹配每个字符包括新行。这可以使用RegexOptions.Singleline或将(?s)放在正则表达式的开头来指定。

\w+用于匹配一个或多个单词字符,即a-zA-Z0-9_
\W*用于匹配零个或多个非单词字符 [^>]用于匹配非>的字符。