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>

为了清楚起见,添加了换行符和标识,真正的字符串没有它

如何获得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

这应该是相当健壮的。可选空格、换行符和其他东西。还找到半角颜色代码,如果没有,则不跳转到下一个h2color

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

结果是第一个也是唯一一个捕获的组。

试试看!

于 2012-05-29T12:47:19.620 回答
0

尝试这个:

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