如何使用正则表达式从字符串中获取值

时间:2012-05-29 11:58:10

标签: c# regex

我有这个字符串文字:

    <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 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

如前所述,字符串中有无标签[\ s]和换行符[\ n] 。正则表达式为:

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

因此代码变为,

Match match = Regex.Match(cssSettings, @"(?<=[.]*h2{color:)[#\w]*(?=[.]*)");
                if (match.Success)
                {
                    string key = match.Value;
                }

答案 2 :(得分:0)

试试这个:

@"h2\s*{\s*color: (#.{6};)"

答案 3 :(得分:0)

这应该是相当强大的。可选空格,换行符和东西。如果h2没有color,也会找到半角颜色代码并且不会跳转到下一个块。

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

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

Try it!