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#replace内で直接使用できるかどうかは実際にはわかりません。

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

Regex.Replace - 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.+?;

そして、その正規表現から残りを推定できると思います。ただし、問題は、その文の終わりが常にあると想定していることです。CSS を使用すると、それを想定できるかどうかわからないため、正規表現では実行できないと誰もが言うのはそのためです。しかし、少しの間、私についてきてください。ここで、C# では、次のように記述できます (ここに文書化されています)。;

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

$1and$3は、キャプチャされた最初と 3 番目の式を保持します。

于 2012-10-16T13:32:13.163 に答える