C# 我可以使用什么作为Regex.Match(String,Int32)的静态等价物?

C# 我可以使用什么作为Regex.Match(String,Int32)的静态等价物?,c#,.net,regex,C#,.net,Regex,我使用一个由大约11个正则表达式组成的永久集来解析大约80k-200k个字符长的字符串。到目前为止,我只是在我必须使用的每个地方使用了新的正则表达式(@“blah”),而且 但是使用这些实例方法并没有利用.NET的正则表达式缓存。所以我想重构我的代码,改用静态方法。问题是我找不到一个静态等价物 我考虑过只使用适当的字符串,但据我所知,它会为我分配新的字符串 我还有其他选择吗?您可以创建11个正则表达式的静态实例,并在任何地方使用它 static Regex r= new Regex(...);

我使用一个由大约11个正则表达式组成的永久集来解析大约80k-200k个字符长的字符串。到目前为止,我只是在我必须使用的每个地方使用了
新的正则表达式(@“blah”)
,而且

但是使用这些实例方法并没有利用.NET的正则表达式缓存。所以我想重构我的代码,改用静态方法。问题是我找不到一个静态等价物

我考虑过只使用适当的字符串,但据我所知,它会为我分配新的字符串


我还有其他选择吗?

您可以创建11个正则表达式的静态实例,并在任何地方使用它

static Regex r= new Regex(...);
或者您可以创建一个包含正则表达式的静态单例对象

public MyStaticObject{
    private  Regex r1;
    private  Regex r2;

    public Regex R1{
        get{ return r1;}
    }
    //...
    private MyStaticObject instance;

    private MyStaticObject(){
        r1=new Regex(...);
    }

    public MyStaticObject GetInstance(){
        if(instance==null){
            instance= new MyStaticObject();
        }
        return instance;
    }
}

阅读更好你的问题也许我误解了你的要求。。。问题是您需要缓存正则表达式,或者在测试子字符串与正则表达式时不想分配新字符串?@Gabber我只是想优化正则表达式的使用以减少解析时间。我认为你的答案是好的。我不知道为什么我没有想到它。也许我只是对“耦合过程”读得太多了,并且误解了它。如果你在所有字符串上都使用了一组通用的正则表达式,你可以将它们组合起来,以1/4的空间和10倍的速度重构成一个正则表达式。