用C#中的正则表达式替换字体大小、字体系列、行距等

用C#中的正则表达式替换字体大小、字体系列、行距等,c#,regex,C#,Regex,目前,我正在从HTML字符串中删除某些格式标记,并希望了解足够的正则表达式,以便能够替换任何格式。首先,这是我所做的,但我希望它适用于任何字体大小、系列等: p.body = p.body.Replace("line-height: 14px;", ""); p.body = p.body.Replace("font-family: Arial, Helvetica, sans;", ""); p.body = p.body

目前,我正在从HTML字符串中删除某些格式标记,并希望了解足够的正则表达式,以便能够替换任何格式。首先,这是我所做的,但我希望它适用于任何字体大小、系列等:

            p.body = p.body.Replace("line-height: 14px;", "");
            p.body = p.body.Replace("font-family: Arial, Helvetica, sans;", "");
            p.body = p.body.Replace("font-size: 11px;", "");

实际上,我不确定正则表达式是否可以直接在C#replace中使用。

要在C#中使用正则表达式,需要使用

要仅匹配您提供的特定类型的样式,我将尝试匹配:

"line-height\\s:.*?;?"
"font-family\\s:.*?;?"
"font-size\\s:.*?;?"
或者,总的来说:

Regex.Replace(htmlString, "(line-height|font-family|font-size)\\s:.*?;?", String.Empty);

可以删除整个样式属性。。也许是这样

Console.Write(Regex.Replace("<td style=\"text-align: right; vertical-align: bottom; width: 368px;\">", " style=\"[^\"]+\"", "")); // outputs "<td>"
Console.Write(Regex.Replace(“,”style=\“[^\”]+\”“,”);//输出
辅助功能

    public static string RemoveStyle(string html, string style)
    {
        Regex regex = new Regex(style + "\\s*:.*?;?");

        return regex.Replace(html, string.Empty);
    }
用法:

string input = "color: red ; line-height: 10px  ; font-family: Arial, Helvetica, sans;  ";
input = RemoveStyle(input, "line-height");
input = RemoveStyle(input, "font-family");

// now, input = "color: red ;"

好的,首先让我说你正在尝试的已经成为了新的旅行推销员问题。但是,我想引用下面的帖子,在接受的答案中,你可以用正则表达式解析HTML,你只是不想。请阅读它,因为它将帮助你理解这些障碍

现在,谈谈你的具体问题

假设您有一些如下HTMl:

<html>
<head>
</head>
<body>
    <span style="line-height: 14px; font-family: Arial, Helvetica, sans; font-size: 11px;">Some text in the span</span>
</body>
</html>
line-height.+?;
我认为你可以从这个正则表达式推断出其余的。然而,问题是你假设有一个
总是以这个语句结尾-我不确定你可以假设,所以这就是为什么每个人都告诉你它不能用正则表达式来完成。但是跟着m现在,在C语言中,你可以这样写(记录在案):


$1
$3
将保留第一个和第三个捕获的表达式。

为什么要从HTML中删除格式?如果这是为了清理用户输入,那么最好使用白名单。关于最后一句话:是。(答案是“否”)抱歉,这是值得的否决票。Regex在我看来像是乱七八糟的东西。你们花了2分钟的时间,我就花了一整天的时间。汤姆,我有一个内容可编辑的div。根据使用的浏览器不同,它们生成的格式也不同。如果可能的话,我需要去掉所有的格式。谢谢迈克。到目前为止,一切都很好。我会处理一个问题“假设<代码>”“事情,因为我很确定你实际上不能这么想。例如,我认为这是有效的HTML:
@Kache,事实上你是100%正确的-我想不出这个例子,但我知道有一个!Mike,我没有提到我要删除的样式是由浏览器添加到contenteditable div中的,而不是由用户输入的。我可以阻止用户添加标记。我希望(假设)浏览器在每种样式后都会添加分号。从来没有人先得到答案。否则你的答案可能也会起作用。@Dave,这不是问题,但我想确保你理解使用正则表达式查找HTML存在的障碍,它非常复杂,而且非常易变。我只是想:我不确定是否有必要避开
-
。它工作得很完美。谢谢(我认为可以安全地假设分号是为了我的目的而存在的)它对我有用,只是做了一个小改动:Regex Regex=newregex($“{style}\\s*:*?;”);
var newString = RegEx.Replace(htmlString, "(line-height:)(.+?)(;)", "$1 $3");