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

时间:2012-08-30 10:18:46

标签: c# .net regex

我使用一组约11个正则表达式来永久解析大约80k到200k个字符的长字符串。到目前为止,我只使用new Regex(@"blah")在我必须使用Match(String, Int32)Replace(String, String)Replace(String, MatchEvaluator)的每个地方。

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

我考虑过只使用String.Substring(Int32),但据我所知,它会为我分配新的字符串。

我还有其他选择吗?

1 个答案:

答案 0 :(得分:1)

您可以创建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;
    }
}