C# 在句子中找到标记,排除它们,然后将它们按相同的顺序和位置放回原处
假设我有这样的字符串:C# 在句子中找到标记,排除它们,然后将它们按相同的顺序和位置放回原处,c#,.net,C#,.net,假设我有这样的字符串: string str = "This is an <b>Example</b> of the string" 但是之后,我想把标签放回去,这样我就可以用粗体属性打印那个部分了。最简单的方法是什么 创建一个没有html标记的新字符串,而现有字符串保持原样。您可以将两者用于不同的目的 字符串在C#中是不可变的。您需要使用HTML解析器读取HTML。这样做的技巧是node.RemoveChild(oldChild,keepGrandChild)。您可以
string str = "This is an <b>Example</b> of the string"
但是之后,我想把标签放回去,这样我就可以用粗体属性打印那个部分了。最简单的方法是什么 创建一个没有html标记的新字符串,而现有字符串保持原样。您可以将两者用于不同的目的
字符串在C#中是不可变的。您需要使用HTML解析器读取HTML。这样做的技巧是
node.RemoveChild(oldChild,keepGrandChild)
。您可以通过添加删除的所有标记来扩展逻辑,如、
等
static void Main(string[] args)
{
string html = "<span>This is an <b>Example</b> of the string</span>";
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
List<HtmlNode> spanNodes = doc.DocumentNode.Descendants().Where(x => x.Name == "span").ToList();
foreach (HtmlNode node in spanNodes)
{
HtmlNode boldNode = node.SelectSingleNode("b");
node.RemoveChild(boldNode, true);
}
Console.WriteLine(doc.DocumentNode.OuterHtml);
}
使用HtmlAgilityPack添加
代码>只需解析字符串,将索引保存在标记所在的位置并删除它们。之后,只需再次插入它们。字符串上的值将保持与您删除它们时的值相同?是的,它将保持不变。检查我的答案并告诉我是否对您有所帮助。以及他将如何创建它,如果字符串来自外部源,比如html页面,他想去掉粗体标记?@mybirthname:strings在C#中是不可变的,不管从哪里获得它们。那么如果它们是不可变的,我不明白这一点。。。op询问如何创建它,答案是创建一个新字符串。每个人都知道他需要创建新字符串或覆盖上一个字符串。这不是op的问题。问题是如何从标记中去掉包含在其中的字符串。是否RemoveChild
也会删除
中的内容?因此,我们将属性keepGrandChild设置为true。这将防止删除标签中的内容。好的,这是有意义的。这就是我一直使用命名属性的原因。;-)谢谢,伙计。这有助于……)
static void Main(string[] args)
{
string html = "<span>This is an <b>Example</b> of the string</span>";
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
List<HtmlNode> spanNodes = doc.DocumentNode.Descendants().Where(x => x.Name == "span").ToList();
foreach (HtmlNode node in spanNodes)
{
HtmlNode boldNode = node.SelectSingleNode("b");
node.RemoveChild(boldNode, true);
}
Console.WriteLine(doc.DocumentNode.OuterHtml);
}
PM> Install-Package HtmlAgilityPack