繁体   English   中英

从HTML提取字符串

[英]Extract string from HTML

我想从以下html代码中提取字符串KLE3KAN918D429

<td class="Labels"> CODE (Sp Number): </td><td width="40.0%"> KLE3KAN918D429</td>

C#中是否有一种方法可以指定源文本,起始字符串,终止字符串并获取起始和终止之间的字符串?

根据评论,您可能最好使用解析库来迭代DOM结构,但是如果您可以对要解析的html做出一些假设,则可以执行以下操作:

var html = "<td class=\"Labels\"> CODE (Sp Number): </td><td width=\"40.0%\"> KLE3KAN918D429</td>";
var labelIndex = html.IndexOf("<td class=\"Labels\">");
var pctIndex = html.IndexOf("%", labelIndex);
var closeIndex = html.IndexOf("<", pctIndex);
var key = html.Substring(pctIndex + 3, closeIndex - pctIndex - 3).Trim();
System.Diagnostics.Debug.WriteLine(key);

可能需要足够的脆性,但有时又快速又脏。

正如其他人已经建议的那样,您应该使用HtmlAgilityPack之类的东西来解析html。 请勿使用正则表达式或其他技巧来解析html。

您的html字符串中有几个td节点。 使用td[last()] XPath确实很容易获得最后一个:

string html = "<td class=\"Labels\"> CODE (Sp Number): </td><td width=\"40.0%\"> KLE3KAN918D429</td>";
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
var td = doc.DocumentNode.SelectSingleNode("td[last()]");
var result = td.InnerText.Trim(); // "KLE3KAN918D429"

我真的建议为此使用HTMLAgilityPack。

就像这样简单:

var doc = new HtmlDocument();
doc.LoadHtml(@"<td class=""Labels""> CODE (Sp Number): </td><td width=""40.0%""> KLE3KAN918D429</td>");

var tdNode = doc.DocumentNode.SelectSingleNode("//td[@class='Labels' and text()=' CODE (Sp Number): ']/following-sibling::td[1]");
Console.WriteLine(tdNode.InnerText.Trim());

在开始之前,请从NuGet添加HtmlAgilityPack:

Install-Package HtmlAgilityPack

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM