【发布时间】:2023-03-28 04:18:01
【问题描述】:
我在 ASP.Net 应用程序中有以下 VB.Net 2.0:
output = Regex.Replace(output, "<p>(?:(?:\<\!\-\-.*?\-\-\>)|&(?:nbsp|\#0*160|x0*A0);|<br\s*/?>|[\s\u00A0]+)*</p>", String.Empty, RegexOptions.Compiled Or RegexOptions.CultureInvariant Or RegexOptions.IgnoreCase Or RegexOptions.Singleline)
很好匹配的示例:
<p></p><p> </p><p><br/><br/></p><p><!-- comment --><!-- comment --></p><p>&nbsp;&nbsp;</p><p><br/>&nbsp;</p><p><!-- comment --><br/><!-- comment --></p><p>&nbsp;<br/></p>
我想匹配但不匹配的示例:
<p > <!--[if !supportLineBreakNewLine]--><br /> <!--[endif]--></p>
我如何使小组和重复按我想要的方式工作?
编辑: 哎呀,忘记评论组了。 编辑 #2: 糟糕,忘记了失败。 编辑 #3: 固定示例。 编辑#4:根据答案更新正则表达式
结论:
这是我对所有三个答案的基准测试结果。由于这三个现在都匹配了所有内容,因此我在一个文本块上运行了 10,000 次迭代:
Mine:
<p\s*>(?:(?:<!--.*?-->)|&(?:nbsp|\#0*160|x0*A0);|<br\s*/?>|[\s\u00A0]+)*</p>
6.312
Gumbo:
<p\s*>(?:[\s\u00A0]+|&(?:nbsp|\#0*160|x0*A0);|<br\s*/?>|<!--(?:[^-]+|-(?!-))*-->)*</p>
6.05
steamer25:
<p\s*>(?:(?:\ \;)|(?:\&\#0*160\;)|(?:<br\s*/?>)|\s|\u00A0|<!\-\-[^(?:\-\-)]*\-\->)*</p>
6.121
Gumbo 的答案是最快的,所以我将他标记为正确答案。
【问题讨论】:
-
你想做什么?
-
我正在尝试从仅包含以下内容的 html 内容中去除所有 P 标签:html cmets、不间断空格、BR 元素或空白字符。
标签: .net asp.net vb.net regex asp.net-2.0