繁体   English   中英

正则表达式拆分返回的空格

[英]Regex.Split returning whitespaces

我想将视图作为HTML文档导出到ASP.NET页上的用户。 我想提供仅获取部分视图的选项。

因此,我想用Regex.Split()分割输出。 我写了一个正则表达式来匹配要剪切的部分。 分割后,我将2个输出部分再次放在一起。

问题是我得到3部分的列表,其中第二部分包含" " 如何更改输出仅包含2个字符串的代码?

我的代码:

textParts = Regex.Split(text, @"<!--Graphic2-->(.|\n)*<!--EndDiscarded-->");
text = textParts[0] + textParts[1];

text包含HTML,CSS和jQuery代码。 我在要剪切的块周围写了<!--Graphic2-->类的注释。

编辑

我现在使用Regex.Replace()方法使其正常工作。 但是我仍然不知道为什么Split不能按我预期的那样工作。

您应该考虑使用诸如HtmlAgilityPack之类的适当工具来解析HTML。

当前的问题是关于Regex.Split为什么返回3个值。 这是由于您的模式中存在捕获组。 Regex.Split返回字符串的开始/结束与匹配的块之间的块, 以及所有捕获的子字符串:

如果在Regex.Split表达式中使用了捕获括号,则任何捕获的文本都将包含在结果字符串数组中。 例如,如果在捕获括号内的连字符上拆分字符串“ plum-pear”,则返回的数组将包含一个包含连字符的字符串元素。

因此, Regex.Split(text, @"<!--Graphic2-->(.|\\n)*<!--EndDiscarded-->")匹配<!--Graphic2-->子字符串,然后进行匹配并捕获进入第1组,尽可能多的出现0个字符,然后匹配<!--EndDiscarded-->") -这些匹配项被删除,不匹配的子字符串被返回,但是捕获到最后一个字符重复捕获组也将返回。

因此,如果打算将正则表达式用于此任务,则应考虑将其重写为@"(?s)<!--Graphic2-->.*?<!--EndDiscarded-->"@"<!--Graphic2-->[^<]*(?:<(?!!--EndDiscarded)[^<]*)*<!--EndDiscarded-->"效率会更高,甚至@"<!--Graphic2-->[^<]*(?:<(?!!--(?:EndDiscarded|Graphic2))[^<]*)*<!--EndDiscarded-->"确保没有嵌套的Graphic2注释匹配。

可以看到,当您要确保模式更有效,更安全地工作时,正则表达式的复杂性就会增加。 但是,即使这些较长的版本也不保证100%的安全性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM