C# 将html行拆分为字符串数组
我在html文件中的表格中有数据:C# 将html行拆分为字符串数组,c#,regex,string,split,toarray,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
<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>
我不能碰这个
002Tone LocFunky冷麦地那
003FunkdoobiestBow哇
如何将单行拆分为数组或列表
string row = streamReader.ReadLine();
List<string> data = row.Split //... how do I do this bit?
string artist = data[1];
string行=streamReader.ReadLine();
列表数据=行。拆分/。。。我该怎么做呢?
字符串艺术家=数据[1];
在解析HTML时,我通常会使用。您可以尝试:
Row.Split /<tr><td>|<\/td><td>|<\/td><\/tr>/
Row.Split/||/
但这取决于HTML的规则性。它是通过编程生成的,还是由人编写的?如果您确信正则表达式总是以相同的方式生成,则只应使用正则表达式,否则应使用适当的HTML解析器。简短回答:切勿尝试使用正则表达式解析来自野外的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);
string html=“001MC不能碰这个”;
string[]values=html.Split(新字符串[]{”“,”“,”“},StringSplitOptions.RemoveEmptyEntries);
列表=新列表(值);
单独列出标记会使其更具可读性,而.removeMptyEntries
会使您的列表中相邻的结束标记和开始标记之间不会出现空字符串
如果这个HTML是来自野生的,或者来自一个可能会改变的工具——换句话说,如果这不仅仅是一次交易——我强烈地鼓励您使用类似的工具。它很容易集成,Intarwebs上有很多示例 如果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]
}
字符串输入=@”
我不能碰这个
002Tone LocFunky冷麦地那
003FunkdoobiestBow哇
";
var xml=XElement.Parse(输入);
//查询每行
foreach(xml.Elements(“tr”)中的var行)
{
foreach(第行元素(“td”)中的var项)
{
Console.WriteLine(项值);
}
Console.WriteLine();
}
//如果你真的需要一个字符串数组。。。
var query=xml.Elements(“tr”)
.Select(row=>row.Elements(“td”)
.Select(项=>item.Value)
.ToArray());
foreach(查询中的var项)
{
//foreach超过项目内容
//或通过项[0…n]访问
}
您是否刚刚写了一个关于解析HTML的问题,并将其标记为regex
?这会给你带来麻烦()。如果有人觉得不舒服,我可以删除这个讨厌的regex标记。话虽如此,但我并不是试图对整个html标记集进行正则化。它只需要匹配三种可能的内容:
、
或
。我对正则表达式不太了解,但我很确定它可以在不出现世界末日的情况下满足这一要求。很酷,我不知道字符串。拆分可能需要一个数组,所以这对我来说就足够了。谢谢漂亮的回答!