从css文件中获取ClassName

时间:2015-09-30 21:38:46

标签: c# css .net winforms

我想从CSS文件中获取所有CSS类名称。

我的CSS文件如下所示:

p.juicy{
    margin-left:40px;
}

p.csBody{
    text-align:justify;
}

p.csCode{
    font-family:"Lucida Console", Monaco, monospace;
    background-color:silver;
    padding: 20px;
    text-align:left;
}

我有以下代码:

     string fileName = System.IO.File.ReadAllText(dir);

        MatchCollection mt = Regex.Matches(fileName, @"[^}]?([^{]*{[^}]*})", RegexOptions.Multiline);
        List<string> list = new List<string>();
        for (int i = 0; i < mt.Count; i++)
        {
            string cls = mt[i].Captures[0].ToString().Trim();
            var className = cls.Substring(1, cls.IndexOf("{") - 1).Trim().Replace(":before", "").Replace(":after", "");

            list.Add(className);

        }

我对正则表达式不太熟悉。还有其他解决办法吗?

谢谢

2 个答案:

答案 0 :(得分:0)

好的,我发现了。这将有效。

MatchCollection mt = Regex.Matches(fileName, @"\.(.*?)\{", RegexOptions.Multiline);

但是有没有使用正则表达式的解决方案?

答案 1 :(得分:0)

如果你想要从常规结构化文本中获取字符串,那么正则表达式非常好,但是当你需要解析&#34;#34;东西。在这种情况下,如果您的文件包含字符串文字,它们恰好包含其中的css-selctor结构,它就会失败。例如,您有一个content: ".im-a-word-with-a-space-afterwards {"。如果您忘记解析.my-class:before之类的伪选择器以及.one-class.another-class之类的组合,它也会遇到麻烦。

如果您确定确定您的阅读结构(例如,因为它您的 CSS),那么我建议您坚持使用正则表达式和躲避边缘案件。这适用于较短的作业和内部的一次性脚本。

如果您需要一个超级健壮的解决方案来获取所有类名,那么我要么编写一个合适的CSS解析器(不明智),要么获得一个先前可用的exCSS,其中&#34;了解&&#34; #34; CSS足以提取类名等信息。