【发布时间】:2014-06-16 02:25:12
【问题描述】:
我有一个带有 <tr> 类的 HTML 页面,我需要捕获这些标签之间的文本。
我试过Regex:
(?i)<tr[^>]*?>([^<]*)</tr>
但它不起作用。
这是我所有的 C# 代码:
string patternPost = @"(?i)<tr[^>]*?>([^<]*)</tr>";
MatchCollection m1 = Regex.Matches(html, patternPost, RegexOptions.Multiline);
foreach (Match m in m1)
{
MessageBox.Show(m.Groups[1].Value);
}
您可以在此处找到 HTML 页面的示例:http://pastebin.com/ewN5NZis
你可以看到 2 个块,我需要为每个块存储三个不同的列表中的三个信息:
List 1: Title1, Title2
List 2: John, Antony
List 3: 29/04/14, 28/04/14
使用我的第一个正则表达式,我想首先尝试捕获所有块并跳过无用信息,例如与 tr 不同的标签,然后我想尝试使用 3 个不同的正则表达式为每个块捕获 3 个信息。 这是正确的吗?我希望你现在能理解我。
【问题讨论】:
-
为什么不使用
XmlDocument类? -
根据@Jonesy 的链接,这是一个BAD IDEA!
-
请定义不起作用。对于所有反对者来说,正则表达式比看起来更强大,read this。好的,对于即将到来的新手正则表达式审阅者来说,它可能无法维护,但是嘿,只需添加带有
x修饰符的 cmets :) -
很惊讶你是第一个用 C# 编写网络抓取工具的人......我似乎记得过去看到过类似的问题 - 也许你可以尝试搜索它:) 请注意 问题包含阅读 HTML 的大部分可能方法(包括一些关于 RegEx 和 HtmlAgilityPack 链接的理论),因此请确保在最上面的答案之前阅读它。