使用C#更改字符串中文本内容的最简单方法是什么?

时间:2012-12-20 10:00:06

标签: c#

我的字符串中包含HTML,如下所示:

<div id="control">
    <a href="/xx/x">y</a>
    <ul>
        <li><a href="/C003Q/x" class="dw">x</a></li>
        <li><a href="/C003R/xx" class="dw">xx</a></li>
        <li><a href="/C003S/xxx" class="dw">xxx</a></li>
    </ul>
</div>

我想将此更改为以下内容:

<div id="control">
    <a data-href="/xx/x" ><span>y</span></a>
    <ul>
        <li><a data-href="/C003Q/x" class="dw"><span>x</span></a></li>
        <li><a data-href="/C003R/xx" class="dw"><span>xx</span></a></li>
        <li><a data-href="/C003S/xxx" class="dw"><span>xxx</span></a></li>
    </ul>
</div>

我听说过正则表达式,但我不知道如何使用它来更改地址标记内的内容并同时更改href。我需要两次使用正则表达式吗?我可以使用正则表达式更改<a ... >...</a>的内部,还是使用C#更简单?

3 个答案:

答案 0 :(得分:2)

一般来说,正则表达式not suitable for parsing HTML,例外是众所周知且结构良好的HTML(即你确切知道你要解析的内容)。

您可以使用HTML解析器 - HTML Agility Pack是一个受欢迎的选项,还有CsQuery


  

什么是Html Agility Pack(HAP)?

     

这是一个敏捷的HTML解析器,它构建一个读/写DOM并支持普通的XPATH或XSLT(你实际上不需要理解XPATH或XSLT来使用它,不用担心......)。它是一个.NET代码库,允许您解析“out of the web”HTML文件。解析器非常容忍“真实世界”格式错误的HTML。对象模型与提出System.Xml非常相似,但对于HTML文档(或流)。


  

CsQuery - .C#jQuery Port for .NET 4

     

CsQuery是.NET 4的jQuery端口。它实现了所有CSS2&amp; CSS3选择器,jQuery的所有DOM操作方法,以及一些实用方法。大多数jQuery测试套件(截至1.6.2)已移植到C#。

答案 1 :(得分:1)

您可以使用正则表达式替换。使用括号来捕获您匹配的文本中的值,并使用$1$2等。使用替换字符串中的值:

str = Regex.Replace(
  str,
  "<a href=\"(.+?)\" class=\"dw\">(.+?)</a>",
  "<a data-href=\"$1\" class=\"dw\"><span>$2</span></a>"
);

注意:如果HTML代码没有完全相同的表单,则替换将不起作用。例如,如果锚标记中有另一个属性,或者属性顺序相反,则模式将不匹配。

答案 2 :(得分:0)

如果您不想使用Regex,可以执行以下操作:

string newString = oldString.Replace("dw\">", "dw\"><span>")
                            .Replace("</a", "</span></a");