正则表达式以提取跨度标签值

时间:2018-08-27 06:15:11

标签: c# html regex

我需要使用c#提取nHKS8cG006 来自"Content from Eikon: <span class="tr-pnac" id="x2">ID:nHKS8cG006</span>" 这里“应该将Eikon的内容作为正则表达式的一部分包括在内,并且span的类名称始终保持不变,但是id值可能会有所不同,就像x18,17,x96等等。

谢谢。

2 个答案:

答案 0 :(得分:0)

最好使用HTML Agility Pack sklearn release

用于解析HTML的正则表达式不是一个好习惯。

// From File
var doc = new HtmlDocument();
doc.Load(filePath);

// From String
var doc = new HtmlDocument();
doc.LoadHtml(html);

// From Web
var url = "http://html-agility-pack.net/";
var web = new HtmlWeb();
var doc = web.Load(url);

string whatYouNeed = doc.GetElementbyId("x2");

答案 1 :(得分:0)

您可以在没有附加组件的情况下使用以下代码。它使用System.Xml中的标准类。

var txt = "Content from Eikon: <span class=\"tr-pnac\" id=\"x2\">ID:nHKS8cG006</span>";
var xml = new System.Xml.XmlDocument();
xml.LoadXml($"<root>{txt}</root>");
var spanNodes = xml.DocumentElement.SelectNodes("//span[contains(@class, 'tr-pnac')]");
//or
//var spanNodes = xml.DocumentElement.SelectNodes("//span[@class='tr-pnac']");
foreach (XmlNode n in spanNodes)
{
    System.Diagnostics.Debug.WriteLine(n.InnerText.Substring(3));
}

以下是适合您的Regex版本:

var txt = "Content from Eikon: <span class=\"tr-pnac\" id=\"x2\">ID:nHKS8cG006</span>";
var regex = new Regex("Content from Eikon: <span class=\"tr-pnac\" id=\"[a-zA-Z0-9]+\">ID:(?<id>[a-zA-Z0-9]+)</span>", RegexOptions.IgnoreCase);
var match = regex.Match(txt);
System.Diagnostics.Debug.WriteLine(match.Groups["id"].Value);