什么更适合解析:正则表达式或linq
本文关键字:正则表达式 linq 什么 | 更新日期: 2023-09-27 18:10:58
我正在解析网页到windows phone 7,我需要知道什么是更好的方法来做到这一点。最重要的是性能。我在imdb的例子中看到作者使用正则表达式,但我不确定如果我使用Html敏捷包和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)很容易。也许敏捷也是如此,然而,我没有深入研究这个包,所以不能这么说。