真正的大字符串上的正则表达式性能问题

时间:2016-01-15 22:22:52

标签: c# regex

现在我是新手使用正则表达式,所以我非常感谢你的帮助。

我有一个非常大的字符串(我正在将一个as3文件解析为json),我需要在对象中找到那些尾随的逗号。

这是我正在使用的正则表达式

public static string TrimTraillingCommas(string jsonCode)
{
    var regex = new Regex(@"(.*?),\s*(\}|\])", (RegexOptions.Multiline));

    return regex.Replace(jsonCode, m => String.Format("{0} {1}", m.Groups[1].Value, m.Groups[2].Value));
}

问题在于它真的很慢。如果不在字符串中使用它,则完成程序的时间为:00:00:00.0289668并且使用它:00:00:00.4096293

有人可以建议使用改进的正则表达式或算法来更快地替换那些尾随逗号。

Here is where i start from ( the string with the trailing commas )

Here is the end string I need

2 个答案:

答案 0 :(得分:1)

您可以通过删除捕获组来简化正则表达式,通过前瞻替换后者的目的:

var regex = new Regex(@",\s*(?=\}|\])");
return regex.Replace(jsonCode, " ");

答案 1 :(得分:0)

您不需要第一个表达式.*?,您可以转换备选方案 进入一个角色类。这是关于你能做的最好的事情。

var regex = new Regex(@",[^\S\r\n]*([}\]])");
return regex.Replace(jsonCode, " $1");