我在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];
答案 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解析器