我应该何时使用Regex而不是字符串操作,反之亦然只考虑性能?
答案 0 :(得分:17)
尽管字符串操作通常会稍快一些,但实际性能在很大程度上取决于许多因素,包括:
随着正则表达式变得越来越复杂,编写表现良好的等效字符串操作代码将花费更多的精力和复杂性。
答案 1 :(得分:6)
我用两个函数做了一些基准测试,这两个函数叫做FunctionOne(字符串操作)和FunctionTwo(Regex)。他们应该得到'<'之间的所有匹配和'>'。
基准#1:
基准#2:
结论:如果有效编程,字符串操作几乎总是会超过正则表达式。但是它越复杂,字符串操作就越难以保持性能问题,而且还要保持维护。
代码功能
private void FunctionOne(string input)
{
var matches = new List<string>();
var match = new StringBuilder();
Boolean startRecording = false;
foreach (char c in input)
{
if (c.Equals('<'))
{
startRecording = true;
continue;
}
if (c.Equals('>'))
{
matches.Add(match.ToString());
match = new StringBuilder();
startRecording = false;
}
if (startRecording)
{
match.Append(c);
}
}
}
代码功能
Regex regx = new Regex("<.*?>");
private void FunctionTwo(string input)
{
Match m = regx.Match(input);
var results = new List<string>();
while (m.Success)
{
results.Add(m.Value);
m = m.NextMatch();
}
}
答案 2 :(得分:5)
字符串操作总是比正则表达式操作更快。当然,除非你以低效的方式编写字符串操作。
必须解析正则表达式,并生成代码以使用字符串操作执行操作。充其量,正则表达式操作可以做最好的字符串操作。
不使用正则表达式,因为它们可以比纯字符串操作更快地执行任何操作,因为它可以用很少的代码执行非常复杂的操作,而且开销相当小。
答案 3 :(得分:1)
我在C#中做了一些分析,比较以下内容:
1)LINQ to Objects。
2)Lambda表达式。
3)传统的迭代方法。
所有3种方法均使用和不使用正则表达式进行测试。 在我的测试用例中得出的结论很清楚,在大量文本中搜索字符串时,正则表达式在所有3种情况下都比非正则表达式慢很多。
您可以在我的博客上阅读详细信息: http://www.midniteblog.com/?p=72