Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在句子中找到标记,排除它们,然后将它们按相同的顺序和位置放回原处_C#_.net - Fatal编程技术网

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