Regex-Replace太慢了

Regex-Replace太慢了,regex,rss,feed,xmlreader,rss-reader,Regex,Rss,Feed,Xmlreader,Rss Reader,在我的Rss提要阅读系统上,我需要删除任何现存的脚本块,因为有人说这会让XmlReader感到困惑 为此,我正在执行我在web上找到的这段代码: allXml = Regex.Replace(allXml, "(.*)<script type='text/javascript'>.+?</script>(.*)", "$1$2"); allXml=Regex.Replace(allXml,(.*))+?(.*),“$1$2”); 但是这太慢了。。。有没有办法做到这一点

在我的Rss提要阅读系统上,我需要删除任何现存的脚本块,因为有人说这会让XmlReader感到困惑

为此,我正在执行我在web上找到的这段代码:

allXml = Regex.Replace(allXml, "(.*)<script type='text/javascript'>.+?</script>(.*)", "$1$2");
allXml=Regex.Replace(allXml,(.*))+?(.*),“$1$2”);
但是这太慢了。。。有没有办法做到这一点?我已经试着先进行比赛,但这同样很慢,就像这样:

Match rgx = Regex.Match(allXml, "(.*)<script type='text/javascript'>.+?</script>(.*)");

if (rgx.Success)
    allXml = Regex.Replace(allXml,"(.*)<script type='text/javascript'>.+?</script>(.*)","$1$2");
Match rgx=Regex.Match(allXml,(.*))+?(.*);
如果(rgx.Success)
allXml=Regex.Replace(allXml,“(.*))+?(.*)”,“$1$2”);
第一个
(.*)
一次抓住整行(因为
*
是一个贪婪的量词),然后开始回溯,试图容纳所有后续模式。如果您的字符串是一条很长的线,几兆字节长,那么引擎可能会遇到问题,因为它必须执行很多步骤才能为模式中定义的每个捕获组找到合适的字符串块

如果您想要一个快速且肮脏的正则表达式修复程序,请放弃
(.*)
s,只需使用

string res = Regex.Replace(allXml, "(?s)<script type='text/javascript'>.*?</script>", "")
string res=Regex.Replace(allXml,(?s)。*?,“”)
要删除
子字符串。注意
(?s)
RegexOptions.Singleline
(DOTALL)修饰符的内联等效项,因此
也可以匹配换行符


但是,最好的方法是使用HTML解析器,如。

allXml的大小是多少?这是正确的,您没有任何地方
type=“text/javascript”
(双引号)?或者空白。试着理解你从网络上获取的代码。它的实际功能。这样你就能清楚地知道你实际上在做什么。这里您正在寻找
(所有内容)Javascript(所有内容)
,当然,考虑到正则表达式搜索技术的性质,这需要时间。我建议您搜索脚本块,并将其替换为不会影响代码的内容。例如空白注释或换行符。第一个
(.*)
是罪魁祸首,请使用
Regex.Replace(allXml,“(?)。*?”,”)
。但是最好的方法是使用HTML解析器,比如HtmlAgilityPack。