Skip to main content
 首页 » 编程设计

c#之div 标签的递归正则表达式(不尝试用正则表达式解析 html)

2024年02月23日30qlqwjy

我有一堆 wiki 标记,有时人们只是在 wiki 标记的中间扔下随机 html,而 wikipedia 不知何故就跟着它一起滚动,就像它对其他各种格式错误的 wiki 标记一样。我想匹配 div 中的所有内容。

我需要递归地找到所有 <div>blah</div>标签包括 div 标签和其中的其他 div 标签。我正在尝试匹配 div 标签和其中的所有内容。我有这个,我相信它几乎可以工作:

new Regex(@"\<div.*?\> (?<DEPTH>)                   # opening  
            (?>                # now match... 
               [^(\<div.*?\>)(\<\/div\>)]+          # any characters except divs 
            |                  # or 
               \<div.*?\>  (?<DEPTH>)  # a opening div, increasing the depth counter 
            |                  # or 
               \<\/div\>  (?<-DEPTH>) # a closing div, decreasing the depth counter 
            )*                 # any number of times 
            (?(DEPTH)(?!))     # until the depth counter is zero again 
          \<\/div\>                   # then match the closing fix", 
            RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); 

也许我应该使用另一种方法来解析它,但此时这是我需要的最终正则表达式语句。

这是一个例子:

<div class="infobox sisterproject" style="font-size: 90%; padding: .5em 1em 1em 1em;"> 
<div style="text-align:center;"> 
Find more about '''{{{display|{{{1|{{PAGENAME}}}}}}}}''' on Wikipedia's [[Wikipedia:Wikimedia sister projects|sister projects]]: 
</div><!-- 
-->{{#ifeq:{{{wikt}}}|no||<!-- 
-->[[File:Wiktionary-logo-en.svg|25px|link=wikt:Special:Search/{{{wikt|{{{1|{{PAGENAME}}}}}}}}|Search Wiktionary]] [[wikt:Special:Search/{{{wikt|{{{1|{{PAGENAME}}}}}}}}|Definitions]] from Wiktionary<br />}}<!-- 
-->{{#ifeq:{{{b}}}|no||<!-- 
-->[[File:Wikibooks-logo.svg|25px|link=b:Special:Search/{{{b|{{{1|{{PAGENAME}}}}}}}}|Search Wikibooks]] [[b:Special:Search/{{{b|{{{1|{{PAGENAME}}}}}}}}|Textbooks]] from Wikibooks<br />}}<!-- 
-->{{#ifeq:{{{q}}}|no||<!-- 
-->[[File:Wikiquote-logo.svg|25px|link=q:Special:Search/{{{q|{{{1|{{PAGENAME}}}}}}}}|Search Wikiquote]] [[q:Special:Search/{{{q|{{{1|{{PAGENAME}}}}}}}}|Quotations]] from Wikiquote<br />}}<!-- 
-->{{#ifeq:{{{s}}}|no||{{#ifeq:{{{author|no}}}|yes|<!-- 
-->[[File:Wikisource-logo.svg|25px|link=s:Special:Search/Author:{{{s|{{{1|{{PAGENAME}}}}}}}}|Search Wikisource]] [[s:Special:Search/Author:{{{s|{{{1|{{PAGENAME}}}}}}}}|Source texts]] from Wikisource<br />|<!-- 
-->[[File:Wikisource-logo.svg|25px|link=s:Special:Search/{{{s|{{{1|{{PAGENAME}}}}}}}}|Search Wikisource]] [[s:Special:Search/{{{s|{{{1|{{PAGENAME}}}}}}}}|Source texts]] from Wikisource<br />}}}}<!-- 
-->{{#ifeq:{{{commons}}}|no||<!-- 
-->[[File:Commons-logo.svg|25px|link=commons:Special:Search/{{{commons|{{{1|{{PAGENAME}}}}}}}}|Search Commons]] [[commons:Special:Search/{{{commons|{{{1|{{PAGENAME}}}}}}}}|Images and media]] from Commons<br />}}<!-- 
-->{{#ifeq:{{{n}}}|no||<!-- 
-->[[File:Wikinews-logo.svg|25px|link=n:Special:Search/{{{n|{{{1|{{PAGENAME}}}}}}}}|Search Wikinews]] [[n:Special:Search/{{{n|{{{1|{{PAGENAME}}}}}}}}|News stories]] from Wikinews<br />}}<!-- 
-->{{#ifeq:{{{v}}}|no||<!-- 
-->[[File:Wikiversity-logo-Snorky.svg|25px|link=v:Special:Search/{{{v|{{{1|{{PAGENAME}}}}}}}}|Search Wikiversity]] [[v:Special:Search/{{{v|{{{1|{{PAGENAME}}}}}}}}|Learning resources]] from Wikiversity<br />}}<!-- 
-->{{#ifeq:{{{species<includeonly>|no</includeonly>}}}|no||<!-- 
-->[[File:Wikispecies-logo.svg|25px|link=species:Special:Search/{{{species<noinclude>|{{{1|{{PAGENAME}}}}}</noinclude>}}}|Search Wikispecies]] [[species:Special:Search/{{{species<noinclude>|{{{1|{{PAGENAME}}}}}</noinclude>}}}|{{{species<noinclude>|{{{1|{{PAGENAME}}}}}</noinclude>}}}]] from Wikispecies}} 
</div><noinclude> 

谢谢

请您参考如下方法:

我认为用正则表达式解析 html 不是一个好主意,你可以使用 Html Agility pack