如何循环一个字符串,替换匹配模式的部分?

时间:2012-10-05 06:09:34

标签: c#

我有以下HTML标记

<p>xxxx</p>
 <pre>xxx</pre>
 <p>xxxx</p>
 <pre>yyy</pre>

我需要能够将其更改为:

<p>xxxx</p>
 <pre>ABC xxx ABC</pre>
 <p>xxxx</p>
 <pre>ABC yyy ABC </pre>

我有建议使用:

   var loDoc = XDocument.Parse(lcHTML);
   foreach (XElement loElement in loDoc.Descendants("pre"))

这确实提取了所有pre元素,但它没有给我一种将事物联系在一起并将代码重新插入原始字符串的方法。

我是否有另一种方法可以让我更改我需要的代码。我正在考虑在<pre>..</pre>上使用拆分和拆分但是那时我并不能真正满足我的需要,因为我需要替换<pre>...</pre>

中的代码

3 个答案:

答案 0 :(得分:1)

一种可能性是使用XDocument但它必须是有效的XHTML,你需要引入一个根节点:

public class Program
{
    static void Main()
    {
        var doc = XDocument.Parse(
            @"<html>
              <p>xxxx</p>
              <pre>xxx</pre>
              <p>xxxx</p>
              <pre>yyy</pre>
            </html>"
        );
        foreach (var pre in doc.Descendants("pre"))
        {
            pre.Value = string.Format("ABC {0} ABC", pre.Value);         
        }
        Console.WriteLine(doc);
    }
}

另一种可能性是使用Html Agility Pack

public class Program
{
    static void Main()
    {
        var doc = new HtmlDocument();
        doc.LoadHtml(
            @"<p>xxxx</p>
              <pre>xxx</pre>
              <p>xxxx</p>
              <pre>yyy</pre>"
        );
        foreach (var pre in doc.DocumentNode.Descendants("pre"))
        {
            pre.InnerHtml = string.Format("ABC {0} ABC", pre.InnerHtml);         
        }
        Console.WriteLine(doc.DocumentNode.OuterHtml);
    }
}

答案 1 :(得分:0)

从此链接How to read HTML as XML?

获取XML Doc元素

使用doc元素,尝试

XmlElement root = doc.DocumentElement; 

XmlNodeList nodes = root.SelectNodes("pre"); 

foreach (XmlNode node in nodes) {
   node.value = "ABC" + node.value + "ABC";
} 

答案 2 :(得分:0)

如何使用Strings而不是xml?

String xmlString = ... \\ get string representation from somewhere
xmlString = xmlString.Replace( "<pre>", "<pre>ABC " ); 
xmlString = xmlString.Replace( "</pre>", " ABC </pre>" );