0

目前我正在从 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# 替换中直接使用正则表达式。

4

4 回答 4

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 ;"
于 2012-10-16T13:22:40.917 回答
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);
于 2012-10-16T13:15:39.647 回答
2

正则表达式替换 - MSDN

您可以剥离整个样式属性..也许像这样?

Console.Write(Regex.Replace("<td style=\"text-align: right; vertical-align: bottom; width: 368px;\">", " style=\"[^\"]+\"", "")); // outputs "<td>"
于 2012-10-16T13:16:59.723 回答
1

好吧,让我首先说你正在尝试的已经成为新的旅行推销员问题。但是,我想参考这篇文章,其中接受的答案下方的文章指出您实际上可以使用正则表达式解析 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 中推断出其余部分。但是,问题在于您假设该语句始终有一个;结尾-对于CSS,我不确定您是否可以假设,所以这就是为什么每个人都告诉您不能使用正则表达式来完成的原因。但是跟我来一分钟。现在,在 C# 中,您可能会编写类似这样的内容(在此处记录):

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

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

于 2012-10-16T13:32:13.163 回答