HTML <tr> 标签的正则表达式 [重复]
Posted
技术标签:
【中文标题】HTML <tr> 标签的正则表达式 [重复]【英文标题】:Regex for HTML <tr> tag [duplicate] 【发布时间】: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 个信息。 这是正确的吗?我希望你现在能理解我。
【问题讨论】:
NOOOOOOOOOOOOOOOoooooooooooooo 为什么不使用XmlDocument
类?
根据@Jonesy 的链接,这是一个BAD IDEA!
请定义不起作用。对于所有反对者来说,正则表达式比看起来更强大,read this。好的,对于即将到来的新手正则表达式审阅者来说,它可能无法维护,但是嘿,只需添加带有 x
修饰符的 cmets :)
很惊讶你是第一个用 C# 编写网络抓取工具的人......我似乎记得过去看到过类似的问题 - 也许你可以尝试搜索它:) 请注意 问题包含阅读 HTML 的大部分可能方法(包括一些关于 RegEx 和 HtmlAgilityPack 链接的理论),因此请确保在最上面的答案之前阅读它。
【参考方案1】:
编辑:在您最后的评论中,您说:<tr ....> <tag> ... </tag> <tag2>...</tag2> </tr>
这是对原始问题的扩展。在这个阶段,我同意所有其他建议:您将需要一个 dom 解析器。
旧版编辑:最初您要求匹配 <tr>
标记的内容。规格已更改,因此此答案包含不断发展的版本。
对于普通的 <tr>
标签:从
(?i)<tr>([^<]*)</tr>
或<tr with stuff>
:
(?i)<tr[^>]*>([^<]*)</tr>
或<tr stuff><td stuff>Grab Me</td>
(?i)<tr[^>]*?>\s*<td[^>]*?>(.*)</td
这是一个代码示例:
using System;
using System.Text.RegularExpressions;
class Program
static void Main()
string s1 = "<tr stuff><td stuff>Grab Me</td>";
var r = new Regex("(?i)<tr[^>]*?>\\s*<td[^>]*?>(.*)</td");
string capture = r.Match(s1).Groups[1].Value;
Console.WriteLine(capture);
Console.WriteLine("\nPress Any Key to Exit.");
Console.ReadKey();
// END Main
// END Program
输出:Grab Me
【讨论】:
不,我认为问题在于以上是关于HTML <tr> 标签的正则表达式 [重复]的主要内容,如果未能解决你的问题,请参考以下文章