C#中的正则表达式替换font-size,font-family,line-height等

时间:2012-10-16 13:11:17

标签: 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.Replace("font-size: 11px;", "");

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

4 个答案:

答案 0 :(得分:4)

辅助功能

    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 ;"

答案 1 :(得分:2)

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

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

"line-height\\s:.*?;?"
"font-family\\s:.*?;?"
"font-size\\s:.*?;?"

或者,所有在一起:

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

答案 2 :(得分:2)

Regex.Replace - MSDN

您可以删除整个样式属性..也许是这样?

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

答案 3 :(得分:1)

好吧,首先让我说你正在尝试的东西已成为新的旅行商问题。但是,我想引用this post,其中接受答案下方的帖子指出您可以实际上用正则表达式解析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,你可以写一个这样的RegEx:

line-height.+?;

我认为你可以从RegEx推断其余部分。但是,问题是你 假设 总是有;结束该语句 - 而且我不是 确定 你可以认为,这就是为什么每个人都告诉你不能使用正则表达式。但请跟我一起走一会儿。现在,在C#中你可能会写这样的东西(记录为here):

var newString = RegEx.Replace(htmlString, "(line-height:)(.+?)(;)", "$1 $3");

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