c# - 使用正则表达式替换 HTML 标记内容

标签 c# .net html regex replace

我想在不更改布局的情况下加密 HTML 文档的文本内容。内容以标签对的形式存储,如下所示:text_to_get。我的想法是使用 Regex 检索 (1) 并将每个文本部分替换为加密文本 (2)。我完成了第 (1) 步,但在第 (2) 步遇到了问题。这是我正在处理的代码:

private string encryptSpanContent(string text, string passPhrase, string salt, string  hash, int iteration, string initialVector, int keySize)        
{            
        string resultText = text;
        string pattern = "<span style=(?<style>.*?)>(?<content>.*?)</span>";   
        Regex regex = new Regex(pattern);
        MatchCollection matches = regex.Matches(resultText);          
        foreach (Match match in matches)    
        {                
            string replaceWith = "<span style=" + match.Groups["style"] + ">" + AESEncryption.Encrypt(match.Groups["content"].Value, passPhrase, salt, hash, iteration, initialVector, keySize) + "</span>";                
            resultText = regex.Replace(resultText, replaceWith);
        }
        return resultText;
}

这是错误的行吗(这使得所有文本都被最后一个 replaceWith 值替换)?

            resultText = regex.Replace(resultText, replaceWith);

谁能帮我解决这个问题?

最佳答案

建议您使用 HTML Agility Pack如果您打算使用 HTML,因为您可能会遇到正则表达式问题,尤其是在嵌套标签或格式错误的 HTML 上。

假设您的 HTML 格式正确并且您决定使用正则表达式,您应该使用 Regex.Replace method接受 MatchEvaluator 来替换所有匹配项。

试试这个方法:

string input = @"<div><span style=""color: #000;"">hello, world!</span></div>";
string pattern = @"(?<=<span style=""[^""]+"">)(?<content>.+?)(?=</span>)";
string result = Regex.Replace(input, pattern,
    m => AESEncryption.Encrypt(m.Groups["content"].Value, passPhrase, salt, hash, iteration, initialVector, keySize));

在这里,我为 MatchEvaluator 使用了一个 lambada 表达式,并引用了如上所示的“content”组。我还对 span 标记使用环视,以避免必须将它们包含在替换模式中。

关于c# - 使用正则表达式替换 HTML 标记内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9773962/

相关文章:

c# - 如何确定具有相同 DockStyle 的控件的顺序?

c# - 从网站获取 IIS 站点 ID

html - jquery mobile - 设置选择/选项值

javascript - 为什么我的按钮启动时间不能正常工作?

c# - 最小连续序列组

c# - 如何根据gridview中的eval更改项目模板中的显示文本?

c# - 为什么十进制最小值不转换为字符串?

c# - 具有默认内容值和绑定(bind)值的复选框

c# - 在 C# 中获取正在运行的进程及其 ID 和位置的列表的最快且 CPU 占用最少的方法

html - 在水平导航菜单的无序列表中控制字形间距和文本链接