2011-02-04 100 views
0

我想提取HTML页面中的所有表行。 但使用模式@"<tr>([\w\W]*)</tr>"不起作用。 这是<tr>第一次发生的最后一次出现</tr>的结果。 但我希望每一次出现<tr>...</tr>的值。 任何人都可以请告诉我我该如何做到这一点?C#正则表达式问题

回答

2

我同意马克:你应该使用HTML Agility Pack库。

关于你的正则表达式,你应该去的东西,如:

@"<tr>([\s\S]*?)</tr>" 

这是一个非贪婪模式,你应该获得一场比赛的每一个TR。

5

[\w\W]*匹配greedily所以它会匹配从第一个<tr>到最后一个</tr>

正则表达式的方法不能正常工作,因为HTML不是常规语言。如果您真的想尝试使用惰性修饰符(例如"<tr>(.*?)</tr>")与RegexOptions.Singleline标志,但不能保证在所有情况下都能正常工作。

对于解析HTML,您需要一个HTML解析器。尝试HTML Agility Pack

+1

你可以提供一些c#代码请 – Barun 2011-02-04 22:57:24

+2

我们都知道当你尝试使用正则表达式解析html会发生什么... http://stackoverflow.com/questions/1732348/regex-match-open- tags-except-xhtml-self-contained-tags/1732454#1732454 – 2011-02-04 22:58:11