什么更适合解析:正则表达式或linq

本文关键字:正则表达式 linq 什么 | 更新日期: 2023-09-27 18:10:58

我正在解析网页到windows phone 7,我需要知道什么是更好的方法来做到这一点。最重要的是性能。我在imdb的例子中看到作者使用正则表达式,但我不确定如果我使用Html敏捷包和Linq是否会更好。

注。:我必须解析网站,它不是我的网站。

什么更适合解析:正则表达式或linq

你最好使用Html敏捷包和Linq。

用RegEx解析HTML非常不可靠。

碰巧我正在研究类似的课题。我不会告诉你任何权威的声明,因为现在还为时过早。一开始我选择了3个引擎:

  • AgilityPack
  • 正则表达式

当然,还有更多的选择(甚至我曾经为Palm OS写过一个简单的html查看器),但这似乎是一个好的开始。

Majestic不提供Html->文本转换,只是一个如何遍历Html字符串的示例代码。首先,我实现了简单的转换:

  • 写入所有文本节点
  • 转换& lt; p>"'n'n"和
    "/n"
  • 忽略其他所有

然后我收集了50多个html文件的样本,并使用所有3种方法转换它们。我不得不说,我对这两种方法都不满意。两个一般观察:

  • Majestic和Agility的结果非常相似
  • Regex方法慢了一个数量级。

所以我查看了Regex代码,发现底部有一个无意义的循环。经过简单的优化后,Regex方法只慢了~25%。考虑到它做了30多个复杂的Regex替换,我认为这是一个很好的结果。

然后我写了一个测试html文件,其中包含所有常见的html标签和更多。和之前一样,Majestic和Agility的表现类似。

  • 所有引擎ok: h1, p,标签写成文本
  • 所有引擎故障:h2+, hr, b
  • br: Regex failed, Majestic ok
  • 列表:Regex ok, Majestic失败
  • 简单的2x2表:Regex ok, Majestic failed

还有很多要测试的。例如:

在这个时刻,我只能说Regex似乎是一个更好的选择。然而,上述引擎的性能都不令人满意。积极的一面是,调整这些引擎(尤其是Majestic和Regex)很容易。也许敏捷也是如此,然而,我没有深入研究这个包,所以不能这么说。