我試圖做一個正則表達式查找具有特定類的元素相匹配的CSS類名。正則表達式來當多個用
例如
<span class = "float">
對於我想出了這一點:
\s*class\s*=\s*('|")\s*float\s*('|")\s*
但那麼你當然可以有多個CSS聲明
<span class = "float align cssnames">
我不知道怎麼樣你會讓所有的東西都可選。
我試圖做一個正則表達式查找具有特定類的元素相匹配的CSS類名。正則表達式來當多個用
例如
<span class = "float">
對於我想出了這一點:
\s*class\s*=\s*('|")\s*float\s*('|")\s*
但那麼你當然可以有多個CSS聲明
<span class = "float align cssnames">
我不知道怎麼樣你會讓所有的東西都可選。
也許\s*class\s*=\s*('|")[\w\s]*\bfloat\b[\w\s]*('|")\s*
?
在它看起來float
每側上一個字邊界引號之間,可能是通過進一步字字符和/或空間(即其它的CSS類)包圍。
Regex rgx = new Regex("\"float.*\"");
將匹配「這裏漂浮什麼,但與關閉的引號結束」
該代碼會尋找類=「和」作爲非匹配的錨。然後,它會採取每一個找到的屬性值,並把他們每個人到名爲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!
這似乎是我需要工作。 – Adam