用于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"> </span>
但我只想匹配这部分(最后一个跨度包含字体重量:粗体)
<span style="font-family:Arial; font-size:10pt; font-weight:bold"> </span>
使用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。