我有一个大字符串,格式如下:
{"_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":[]
。我真的不确定我的正则表达式有什么问题,任何帮助都会受到极大的赞赏。