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

本文关键字:最简单 方法 是什么 文本 字符串 中文 | 更新日期: 2023-09-27 17:49:01

我有一个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。我是否需要使用正则表达式两次,我可以使用正则表达式改变<a ... >...</a>的内部,或者有一个更简单的方法与c# ?

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

一般来说,Regex不适合解析HTML,除了众所周知的和结构良好的HTML(即。你确切地知道你要解析什么)。

你可以使用HTML解析器——HTML敏捷包是一个流行的选择,还有CsQuery。


什么是Html敏捷包(HAP)?

这是一个敏捷的HTML解析器,它构建一个读/写DOM,并支持普通的XPATH或XSLT(实际上您不必理解XPATH或XSLT就可以使用它,不用担心…)。它是一个。net代码库,允许你在"网络之外"进行解析。HTML文件。解析器对"现实世界"非常宽容。畸形的HTML。对象模型与System.Xml非常相似,但适用于HTML文档(或流)。


CsQuery - . c# jQuery Port for .NET 4

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

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

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

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

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

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