将html行拆分为字符串数组

时间:2010-08-04 15:35:30

标签: c# regex string split toarray

我在html文件中有数据,在表格​​中:

<table>
    <tr><td>001</td><td>MC Hammer</td><td>Can't Touch This</td></tr>
    <tr><td>002</td><td>Tone Loc</td><td>Funky Cold Medina</td></tr>
    <tr><td>003</td><td>Funkdoobiest</td><td>Bow Wow Wow</td></tr>
</table>

如何将单行拆分为数组或列表?

string row = streamReader.ReadLine();

List<string> data = row.Split //... how do I do this bit?

string artist = data[1];

4 个答案:

答案 0 :(得分:4)

简答:永远不要尝试使用正则表达式解析HTML。它很可能会再次困扰你。

更长的答案:只要你能绝对肯定地保证你正在解析的HTML符合给定的结构,你就可以像Jenni建议的那样使用string.Split()。

string html = "<tr><td>001</td><td>MC Hammer</td><td>Can't Touch This</td></tr>";

string[] values = html.Split(new string[] { "<tr>","</tr>","<td>","</td>" }, StringSplitOptions.RemoveEmptyEntries);

List<string> list = new List<string>(values);

独立列出标记可使此略微更具可读性,而.RemoveEmptyEntries将阻止您在相邻的结束标记和开始标记之间获取列表中的空字符串。

如果这个HTML来自野外,或来自可能会发生变化的工具 - 换句话说,如果这不仅仅是一次性交易 - 我强烈鼓励您使用类似的东西相反,HTML Agility Pack。它很容易集成,Intarwebs上有很多例子。

答案 1 :(得分:3)

如果您的HTML格式正确,您可以使用LINQ to XML:

string input = @"<table>
    <tr><td>001</td><td>MC Hammer</td><td>Can't Touch This</td></tr>
    <tr><td>002</td><td>Tone Loc</td><td>Funky Cold Medina</td></tr>
    <tr><td>003</td><td>Funkdoobiest</td><td>Bow Wow Wow</td></tr>
</table>";

var xml = XElement.Parse(input);

// query each row
foreach (var row in xml.Elements("tr"))
{
    foreach (var item in row.Elements("td"))
    {
        Console.WriteLine(item.Value);
    }
    Console.WriteLine();
}

// if you really need a string array...
var query = xml.Elements("tr")
               .Select(row => row.Elements("td")
                                 .Select(item => item.Value)
                                 .ToArray());

foreach (var item in query)
{
    // foreach over item content
    // or access via item[0...n]
}

答案 2 :(得分:2)

解析HTML时,我通常会转到HTML Agility Pack

答案 3 :(得分:2)

你可以尝试:

Row.Split /<tr><td>|<\/td><td>|<\/td><\/tr>/

但这取决于HTML的规律性。它是以编程方式生成的,还是人类编写的?如果您确定它将始终以相同的方式生成,则应该只使用正则表达式,否则您应该使用正确的HTML解析器