我有以下字符串"</script><div id='PO_1WTXxKUTU98xDU1'><!--DO NOT REMOVE-CONTENTS PLACED HERE--></div>"
我需要从 div 标签中获取属性值。我如何使用 C# 检索它。
避免使用解析htmlregex
Regex
不是解析HTML
文件的好选择..
HTML 并不严格,其格式也不规则。
您可以使用 htmlagilityPack 来执行此操作。
HtmlDocument doc = new HtmlDocument();
doc.Load(yourStream);
List<string> itemList = doc.DocumentNode.SelectNodes("//div[@id]")//selects all div having id attribute
.Select(x=>x.Attributes["id"].Value)//select the id attribute value
.ToList<string>();
//itemList will now contain all div's id attribute value
严格解决所提出的问题,解决它的无数方法之一是隔离div
元素,将其解析为 anXElement
然后以这种方式提取属性的值。
string bobo = "</script><div id='PO_1WTXxKUTU98xDU1'><!--DO NOT REMOVE-CONTENTS PLACED HERE--></div>";
string justDiv = bobo.Substring(bobo.IndexOf("<div"));
XElement xelem = XElement.Parse(justDiv);
var id = xelem.Attribute("id");
var value = id.Value;
当然有很多方法可以解决这个问题,但是这个回答了邮件。
如果您是受虐狂,您可以使用这种老式的 VB3 风格:
string input = @"</script><div id='PO_1WTXxKUTU98xDU1'><!--DO NOT REMOVE-CONTENTS PLACED HERE--></div>";
string startString = "div id='";
int startIndex = input.IndexOf(startString);
if (startIndex != -1)
{
startIndex += startString.Length;
int endIndex = input.IndexOf("'", startIndex);
string subString = input.Substring(startIndex, endIndex - startIndex);
}
一个看起来像这样的 .NET Regex 就可以解决问题
^</script><div id='(?<attrValue>[^']+)'.*$
然后,您可以将值保留为
MatchCollection matches = Regex.Matches(input, @"^</script><div id='(?<attrValue>[^']+)'.*$");
if (matches.Count > 0)
{
var attrValue = matches[0].Groups["attrValue"];
}