我想从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);
}
我对正则表达式不太熟悉。还有其他解决办法吗?
谢谢
答案 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足以提取类名等信息。