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