【问题标题】:extract data from HTML snippet using Regex in .net language使用 .net 语言中的正则表达式从 HTML 片段中提取数据
【发布时间】:2013-11-21 09:03:38
【问题描述】:

这是一个示例

<tr>
  <td>
    <div class="VBChap"></div>
    <a href="/testing/1">Sample Textbook Chapter 1</a> : Introduction to VB.net
  </td>
  <td>09/24/2013</td>
</tr>

文档基本上由这些反复重复的条目组成

我想提取以下内容:

  1. href=".
  2. 之后的部分 URL
  3. 章节正文
  4. 章节名称
  5. 日期

目前我正在使用两个单独的查询来获取数据

查询一:

(?<=^|>)[^><]+?(?=<|$)

这会提取 2、3 和 4。

查询 2:

(?<=<a href=")[^"]+

这会提取 1。

我想要一个可以提取所有四个的查询。

Regex 是我不擅长的。我花了 2 个小时的反复试验才得到这个。

【问题讨论】:

  • 为此使用 HTML AgilityPack,不要使用正则表达式。

标签: c# .net regex vb.net


【解决方案1】:

RegEx 和 HTML 很痛苦。如果您有使用它的范围,那么HTML Agility Pack 就是您想要的。几年前我写了a quick intro into its use

【讨论】:

  • 我现在正在尝试。 ATM 没有很好的文档记录,但看起来很有希望。
【解决方案2】:

考虑以下正则表达式...

((?<=href\=\").*?(?=\")|(?<=href\=\".*?\"\>).*?(?=\<)|(?<=\</.*?\>)[\s\S]*?(?=\<)|(?<=\<td\>).*?(?=</td\>))

祝你好运!

【讨论】:

  • 此代码不检索章节标题。它检索其余部分。但我必须感谢你为此付出的努力。
  • 老实说,它比我使用的匹配模式要好得多。
【解决方案3】:

如果有问题的 HTML 是有效的 XHTML,您可以将其解析为 XML,System.XML 对此有广泛的支持。

然后您可以使用 XPath 进行查询;

...SelectNodes("//tr/td/a/@href").Value

等等!

互联网上的大多数 html 不是有效的 xhtml,但是,在这种情况下,HAP 使用起来非常愉快(如果您选择的话,仍然允许通过 XPath 进行查询)

【讨论】:

  • 我可以修剪文档的部分并将其格式化为有效的 html。如果其他一切都失败了,这是最后的手段。
  • 你可以考虑看看 HAP。它提供类似于 System.XML 中的类来处理 HTML 解析。它将优雅地处理不可靠的 HTML,因此不需要修剪。
猜你喜欢
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
  • 2011-06-26
  • 2019-09-03
  • 2016-12-19
  • 2015-02-26
  • 1970-01-01
相关资源
最近更新 更多