从HTML中提取字符串

本文关键字:字符串 提取 HTML | 更新日期: 2023-09-27 18:18:19

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

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

是否有一个方法在c#中,我可以指定源文本,开始字符串,结束字符串,并得到开始和结束之间的字符串?

从HTML中提取字符串

你是,根据评论,可能最好使用解析库来迭代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);

可能很脆弱,但有时需要的是快速和肮脏。

正如其他人已经建议的那样,您应该使用类似htmllagilitypack的东西来解析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"

我建议使用htmllagilitypack。

很简单:

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中添加htmllagilitypack:

Install-Package HtmlAgilityPack