. net regex在不匹配的情况下超时

本文关键字:情况下 超时 不匹配 regex net | 更新日期: 2023-09-27 18:04:36

我有一个大字符串,格式如下:

{"_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);

regex在列表不为空的情况下正常工作,但是当列表为空时,它会超时,例如"PortfolioIdList":[]。我真的不知道我的正则表达式出了什么问题,任何帮助都会非常感激。

. net regex在不匹配的情况下超时

所以我遇到的问题是,在没有匹配的情况下,regex表达式会一直回溯到第一行(在数千行文本中),这需要异常大量的计算。

我用下列方法解决了这个问题:

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