【问题标题】:Using regex to grab text between multiple lines使用正则表达式在多行之间抓取文本
【发布时间】:2013-01-06 02:42:26
【问题描述】:

我正在尝试从这个 HTML 页面代码中获取标签之前的单词 Juwelier。

我不太擅长正则表达式,尤其是在多行上使用它。 不会是动态的东西:

  • <p>Rubriek:
  • class="category"
  • 当然还有像<p> , </p> , <a> , </a>这样的html标签

这是 HTML 页面代码

    <p>Rubriek: 

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

【问题讨论】:

标签: regex vb.net


【解决方案1】:

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

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* 用于匹配零个或多个非单词字符。
[^&gt;] 用于匹配以下字符不是&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    相关资源
    最近更新 更多