5

私はこの文字列テキストを持っています:

    <meta http-equiv="Content-Type" content="text/html;" charset="utf-8">
    <style type="text/css">
        body {
            font-family: Helvetica, arial, sans-serif;
            font-size: 16px;
        }
        h2 {
            color: #e2703b;
        }.newsimage{
            margin-bottom:10px;
        }.date{
            text-align:right;font-size:35px;
        }
    </style>

明確にするために改行とIDが追加されていますが、実際の文字列には含まれていません

h2どうすれば色の価値を得ることができますか?この場合は、#e2703b;次のようになります。この場合の正規表現の使用方法がわかりません。

この方法を試してみると更新します:

Match match = Regex.Match(cssSettings, @"h2 {color: (#[\d|[a-f]]{6};)");
                    if (match.Success)
                    {
                        string key = match.Groups[1].Value;
                    }

まったく機能しません

4

4 に答える 4

8

正規表現が適切かどうかはわかりませんが、次の正規表現を使用して値を抽出できます。

h2 \\{color: (#(\\d|[a-f]){6};)}

これから最初のグループを取得すると、h2の色に属する値が取得されます。

編集

このコードはそれを取得する必要があります:

String regex = "h2 \\{color: (#(\\d|[a-f]){6};)}";
String input = "<meta http-equiv=\"Content-Type\" content=\"text/html;\" charset=\"utf-8\"><style type=\"text/css\">body {font-family: Helvetica, arial, sans-serif;font-size: 16px;}h2 {color: #e2703b;}.newsimage{margin-bottom:10px;}.date{text-align:right;font-size:35px;}</style>";
MatchCollection coll = Regex.Matches(input, regex);
String result = coll[0].Groups[1].Value;
于 2012-05-29T12:08:50.107 に答える
1

あなたが言ったように、文字列にはタブ[\s]と改行[\n]はありません。したがって、正規表現は次のようになります。

(?<=[.]*h2{color:)[#\w]*(?=[.]*)

したがって、コードは次のようになります。

Match match = Regex.Match(cssSettings, @"(?<=[.]*h2{color:)[#\w]*(?=[.]*)");
                if (match.Success)
                {
                    string key = match.Value;
                }
于 2012-05-29T12:36:06.183 に答える
0

これを試して:

@"h2\s*{\s*color: (#.{6};)"
于 2012-05-29T12:37:57.350 に答える
0

これは非常に堅牢なはずです。オプションのスペース、改行など。また、半値幅のカラーコードを検索し、がない場合h2は次のブロックにジャンプしませんcolor

h2\s*\{[^}]*color\s*:\s*?(#[a-f\d]{3}|#[a-f\d]{6})\b

結果として、最初で唯一のキャプチャされたグループになります。

それを試してみてください!

于 2012-05-29T12:47:19.620 に答える