如何使用regex c#在自定义HTML标签之间避免使用HTML标签#

时间:2015-05-20 15:58:26

标签: c# regex

我有一个要求,其中需要使用RegEx C#找到

'<H3></H3>'
HTML标记计数。

如果中间没有自定义HTML标记(例如,仅包含文本或字符串),则以下代码会正确查找H3标记计数。

var regexHeading = new Regex(@"<h3>(.*?)</h3>");

然而,如果标题标记包含任何自定义HTML标记,则上述RegEx无法按预期工作。 [Ex: <h3><a></a></h3>].

有人建议,这是使用正则表达式c#查找HTML标记计数的最佳方法(即使它包含任何自定义标记)。

部分解决方案(可能对某人有帮助): 我写了一个自定义标记,但它并不适用于所有场景

3 个答案:

答案 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帮助我解决这个问题。 !:)