C# 一个非常大的字符串上的正则表达式性能问题

C# 一个非常大的字符串上的正则表达式性能问题,c#,.net,regex,C#,.net,Regex,现在我还不熟悉使用正则表达式,所以我非常感谢您的帮助 我有一个非常大的字符串(我正在将as3文件解析为json),我需要在对象中找到那些尾随的逗号 这是我正在使用的正则表达式 public static string TrimTraillingCommas(string jsonCode) { var regex = new Regex(@"(.*?),\s*(\}|\])", (RegexOptions.Multiline)); return regex.Replace(js

现在我还不熟悉使用正则表达式,所以我非常感谢您的帮助

我有一个非常大的字符串(我正在将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.0289668
,使用它:
00:00:00.4096293

有人能建议一种改进的正则表达式或算法来更快地替换那些尾随的逗号吗


您可以通过消除捕获组来简化正则表达式,并用前瞻来取代后者的用途:

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

您不需要第一个表达式
*?
,您可以转换替换项
进入角色类。这是你能做的最好的了

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

如果你编译它,你会得到什么?使用:
RegexOptions.Compiled | RegexOptions.Multiline
而不是每次调用
TrimTraillingCommas
时声明新的
Regex
,您可以将其声明为静态。否则,每次运行时都需要“编译”正则表达式。不管正则表达式有多复杂,为什么首先会有尾随的逗号?如果是这样,就不会有了,对吧?如果您有有效的json,也许您可以完全消除对正则表达式的需求。@null问题是我没有有效的json。我甚至没有json。。我有一堆as3文件,它们编写时有很多错误,我需要将它们的值解析为有效的json文件。@JordanKanchelov“错误”是什么意思,它们是否编译?这正是我需要的:)。谢谢