我有一个要求,其中需要使用RegEx C#找到
'<H3></H3>'
HTML标记计数。
如果中间没有自定义HTML标记(例如,仅包含文本或字符串),则以下代码会正确查找H3标记计数。
var regexHeading = new Regex(@"<h3>(.*?)</h3>");
然而,如果标题标记包含任何自定义HTML标记,则上述RegEx无法按预期工作。 [Ex: <h3><a></a></h3>].
有人建议,这是使用正则表达式c#查找HTML标记计数的最佳方法(即使它包含任何自定义标记)。
部分解决方案(可能对某人有帮助): 我写了一个自定义标记,但它并不适用于所有场景
答案 0 :(得分:1)
不建议使用正则表达式解析html,在stackoverflow中有很多答案。
改为使用HtmlAgilityPack。
实施例:
试试这个:
HtmlDocument doc = new HtmlDocument();
doc.Load("file.htm");
var h3nodes = doc.DocumentElement.SelectNodes("//body//h3"];
或
var h3nodes = doc.DocumentElement.Descendants("h3");
h3nodes是标签为“h3”的html元素的节点列表。
对于“SelectNodes”方法参数,请阅读XPath。
答案 1 :(得分:0)
如果您只想计算<H3>
元素的匹配数,那么您只需要匹配开始元素。
如果您需要确保元素格式正确且具有匹配的关闭标记,那么您当前的RegEx应该可以正常工作。如果你能告诉我们你的期望和你得到的结果,那么它将帮助我们给你一个更好的答案。
答案 2 :(得分:0)
谢谢Ethan Brown :-) 你给出的提示解决了我的问题。
正则表达式无法找到
<H3>/n</H3>
所以,我尝试用空字符串替换New line标记,如下所示
publishingPageContent = publishingPageContent.Replace("\n", string.Empty);
var regexHeading = new Regex(@"<h3>(.*?)</h3>");
//Find matching
var matchHeadings = regexHeading.Matches(publishingPageContent);
感谢guyz帮助我解决这个问题。 !:)