【问题标题】:What's the easiest way to change the contents of text in a string with C#?用 C# 更改字符串中文本内容的最简单方法是什么?
【发布时间】:2012-12-07 19:37:27
【问题描述】:

我的字符串中的 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>

我听说过 regex,但我不确定如何使用它来更改地址标签内的内容并同时更改 href。我是否需要使用 regex 两次,我可以使用 regex 更改 &lt;a ... &gt;...&lt;/a&gt; 的内部还是使用 C# 有更简单的方法?

【问题讨论】:

标签: c#


【解决方案1】:

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

您可以使用一些 HTML 解析器 - HTML Agility Pack 是一个流行的选项,还有 CsQuery


什么是 Html Agility Pack (HAP)?

这是一个敏捷的 HTML 解析器,它构建一个读/写 DOM 并支持普通的 XPATH 或 XSLT(实际上你不必了解 XPATH 或 XSLT 就可以使用它,不用担心......)。它是一个 .NET 代码库,可让您解析“网络之外”的 HTML 文件。解析器对“真实世界”格式错误的 HTML 非常宽容。对象模型与 System.Xml 的提议非常相似,但用于 HTML 文档(或流)。


CsQuery - .NET 4 的 .C# jQuery 端口

CsQuery 是 .NET 4 的 jQuery 端口。它实现了所有 CSS2 和 CSS3 选择器、jQuery 的所有 DOM 操作方法以及一些实用方法。大部分 jQuery 测试套件(从 1.6.2 开始)已移植到 C#。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      如果你不想使用Regex,你可以这样做:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-01
        • 2014-04-19
        • 2013-07-01
        相关资源
        最近更新 更多