用于HTML的Regex表达式C#

本文关键字:表达式 Regex HTML 用于 | 更新日期: 2023-09-27 18:25:27

我有以下正则表达式:

^(<span style=.*?font-weight:bold.*?>.*?</span>)

它匹配以下代码:

<span style="font-family:Arial; font-size:10pt"> r.</span></p><p style="margin:0pt"><span style="font-family:Arial; font-size:10pt; font-weight:bold">&#xa0;</span>

但我只想匹配这部分(最后一个跨度包含字体重量:粗体)

<span style="font-family:Arial; font-size:10pt; font-weight:bold">&#xa0;</span>

用于HTML的Regex表达式C#

使用HTML敏捷包解析HTML:

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(htmlContent);
var boldSpans = from s in doc.DocumentNode.SelectNodes("//span")
                let style = s.Attributes["style"].Value
                where style.Contains("font-weight:bold")
                select s;

或者更好的xpath,它在一行中选择所有节点:

doc.DocumentNode.SelectNodes("//span[contains(@style, 'font-weight:bold')]")

不要使用^,因为行不是以要匹配的跨度开头的。

<span style=["'][^'"]*font-weight:bold[^'"]*['"]>[^<]*</span>

或者作为转义字符串:

"<span style=['"'][^''"]*font-weight:bold[^''"]*[''"]>[^<]*</span>"

这将匹配以<span style=开头、后跟单引号或双引号'"的字符串。则[^'"]*允许除结束引号之外的所有字符。

匹配字符串font-weight:bold,后面再跟任意数量的字符,但引出实际结束qoutes的结束qoute和结束标记:[^'"]*['"]>除外。

(请注意,您可能希望也可能不希望在style属性前后允许更多属性。在这种情况下,您需要更改regex)

span可以包含除起始标签<之外的任何数量的任何字符,则字符串必须以结束</span>标签结束。

删除^,因为它意味着行的开头。因此,它总是会得到第一个跨度。更重要的是因为.*的意思是(任何字符)。

这样一来,第一场比赛可能仍然是你现在的输出,但第二场比赛应该是你想要的。

此外,像regexbuddy这样的工具非常适合测试Regex。