【发布时间】:2015-12-14 12:38:37
【问题描述】:
我想在我的 ASP.NET 页面上将视图作为 HTML 文档导出给用户。我想提供只获取部分视图的选项。
因此,我想用Regex.Split() 拆分输出。我写了一个正则表达式来匹配我想要删掉的部分。拆分后,我再次将 2 个输出部分放在一起。
问题是我得到了一个包含 3 个部分的列表,其中第二个包含 " "。如何更改输出仅包含 2 个字符串的代码?
我的代码:
textParts = Regex.Split(text, @"<!--Graphic2-->(.|\n)*<!--EndDiscarded-->");
text = textParts[0] + textParts[1];
text 包含 HTML、CSS 和 jQuery 代码。我在要剪掉的块周围写了<!--Graphic2-->之类的cmets。
编辑
我现在使用Regex.Replace() 方法让它工作了。但我仍然不知道为什么 Split 没有按我的预期工作。
【问题讨论】:
-
仅供参考,您可以使用
RegexOptions.Singleline使.(点)匹配换行符。 -
(.|\n)*是一个非常糟糕的模式,涉及很多回溯并导致灾难性的回溯问题。带有.的单行标志是对任何符号使用贪婪匹配的正确方法。但是,既然你处理的是 HTML,我宁愿你试试 HTML 解析工具。 -
@juharr 谢谢你,我要改变它。
-
或者您可以使用
[\s\S]*代替(.|\n)* -
我认为它甚至会更快/更容易迭代行并在您在一行中看到一个部分的开头并在找到结尾时停止时立即开始捕获... HTML解析和正则表达式似乎都无法完成这项任务。