1

我正在尝试制作一个正则表达式来查找具有特定类的任何元素。

例如

<span class = "float">

为此我想出了这个:

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

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

<span class = "float align cssnames">

我不确定您如何将其他所有内容设为可选。

4

3 回答 3

3

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

float在引号之间,它在两边寻找单词边界,可能被更多的单词字符和/或空格(即其他 CSS 类)包围。

于 2012-11-02T17:14:25.427 回答
0

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

将匹配“在此处浮动任何内容,但以结束引号结尾

于 2012-11-02T17:21:13.377 回答
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!
于 2012-11-02T18:04:44.580 回答