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