Regex在多次使用时匹配css类名

时间:2012-11-02 17:04:04

标签: c# regex

我正在尝试使用正则表达式来查找具有特定类的任何元素。

例如

<span class = "float">

我想出了这个:

\s*class\s*=\s*('|")\s*float\s*('|")\s*

但是当然你可以有多个CSS声明

<span class = "float align cssnames">

我不确定你如何让其他一切都可选。

3 个答案:

答案 0 :(得分:3)

也许\s*class\s*=\s*('|")[\w\s]*\bfloat\b[\w\s]*('|")\s*

在引号之间,它会查找float,左侧有字边界,可能还包含其他字符和/或空格(即其他CSS类)。

答案 1 :(得分:0)

Regex rgx = new Regex("\"float.*\"");

将匹配“float 此处的任何内容,但以结束报价

结束

答案 2 :(得分:0)

此代码将查找class =“和”作为非匹配锚点。然后,它将获取找到的每个属性值,并将每个属性值放入名为Assignements的命名捕获组中。

然后linq将提取出那些名为capture的s,然后从捕获的组中查找单个“Float”项并返回true或false。

string data = @"<span class = ""float align cssnames"">";

string pattern = @"(?:class\s*=\s*\x22)((?<Assignments>[^\s\x22]+)(?:\s?))+(?:\x22)";

var containsFloat =
   Regex.Matches(data, pattern, RegexOptions.Multiline)
      .OfType<Match>()
      .Select(mt => mt.Groups["Assignments"].Captures
                                             .OfType<Capture>()
                                             .Select(c => c.Value))
      .SelectMany(assignments => assignments) // is an IEnumerable<string> = { "float", "align", "cssnames" } at this point
      .Any(assignment => assignment == "float"); // True!