繁体   English   中英

.NET正则表达式在不匹配的情况下超时

[英].NET regex timing out in case of no match

我有一个具有以下格式的大字符串:

{"_index":"2","_t":"g","_id":"3","_source":{"Id":3,"C":3,"PortfolioIdList":[1,3,4],"TISList":[1,2]}
,"sort":[3000]}

PortfolioIdList可以为空[]也可以包含数字,如上所示。 这个想法是当且仅当它包含数字即不为空时,才将另一个数字插入到PortfolioIdList中。 我为此写了一个正则表达式,它正在超时。 正则表达式为:

const string STR_REGEX = @"(\{"")(_)(index"":)(.*?)(""_id"":"")([0-9]*)("")(.*?)(\{.*?""PortfolioIdList"":\[(?!\]))([^\]]*)(\][^\}]*)((.|\r|\n|\r\n|[^\}])*\},)";
var myRegex = new Regex(STR_REGEX, RegexOptions.None);
var strTargetString = File.ReadAllText(@"raw1.txt");
const string STR_REPLACE = @"${1}${3}${5}${6}${7}${8},""_parent"":""${6}""}}\r\n${10}${11},2344${12}\r\n";
var newStr = myRegex.Replace(strTargetString, STR_REPLACE);

如果列表不为空,则正则表达式可以正常工作,但是如果列表为空,则它会超时,例如"PortfolioIdList":[] 我真的不确定我的正则表达式有什么问题,我们将不胜感激任何帮助。

因此,我遇到的问题是,在没有匹配项的情况下,正则表达式表达式会一直回溯到第一行(成千上万行文本),这需要大量的计算。

我通过以下方式解决了这个问题:

  1. 这篇文章对我消除了不必要的回溯很有帮助
  2. 我使用 MSDN帖子有条件地替换了文本

暂无
暂无

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

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