我有一个包含<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个信息。 这是正确的吗?我希望你现在了解我。
答案 0 :(得分:0)
编辑:在你的上一条评论中,你说:<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