我正在编写一个过滤很多值的类。在另一个字符串中搜索/删除/替换字符串的最佳方法是什么?
例如:
name +value (email)
电子邮件,如何使用它? LINQ?还是.Split()
?或正则表达式?
哪种表现最佳?
目前我正在使用它:
string[] parts = val.Split('(');
string Email = parts[1].Replace(")", String.Empty);
答案 0 :(得分:2)
我建议使用正则表达式,因为我认为它是出于这个原因而发明的,它是在字符串和字符串替换中搜索。
答案 1 :(得分:2)
如果我正确理解了您的问题,那么您正试图用可能从其他来源提供的电子邮件替换(电子邮件)的文字
var text = "name +value (email)";
var emailAddress = "someone@test.com";
text = Regex.Replace(text, @"\(email\)", emailAddress);
上面的代码块会将'(email)'替换为emailAddress
变量的内容
请务必将相应的using语句添加到代码文件的顶部
using System.Text.RegularExpressions;
答案 2 :(得分:2)
在我的机器上,代码的变体是最快的(你的代码是第二个)。
注意单位!! 蜱虫以100纳秒为增量。
SplitReplace takes 0.961795 ticks per call Split takes 0.747009 ticks per call Regex takes 2.512739 ticks per call WithLinq takes 2.59299 ticks per call
我的变化只是分裂(没有替换):
string[] parts = val.Split('(', ')');
return parts[1];
测试代码......
[Test]
public void SO()
{
const string input = "name +value (email)";
TestGivenMethod(input, SplitReplace, "SplitReplace");
TestGivenMethod(input, JustSplit, "Split");
TestGivenMethod(input, WithRegex, "Regex");
TestGivenMethod(input, WithLinq, "WithLinq");
}
private void TestGivenMethod(string input, Func<string, string> method, string name)
{
Assert.AreEqual("email", method(input));
var sw = Stopwatch.StartNew();
string res = "";
for (int i = 0; i < 1000000; i++)
{
var email = method(input);
res = email;
}
sw.Stop();
Assert.AreEqual("email", res);
Console.WriteLine("{1} takes {0} ticks per call", sw.ElapsedTicks/1000000.0, name);
}
string SplitReplace(string val)
{
string[] parts = val.Split('(');
return parts[1].Replace(")", String.Empty);
}
string JustSplit(string val)
{
string[] parts = val.Split('(', ')');
return parts[1];
}
private static Regex method3Regex = new Regex(@"\(([\w@]+)\)");
string WithRegex(string val)
{
return method3Regex.Match(val).Groups[1].Value;
}
string WithLinq(string val)
{
return new string(val.SkipWhile(c => c != '(').Skip(1).TakeWhile(c => c != ')').ToArray());
}
答案 3 :(得分:0)
String.Split
相比, Regular Expression
是最简单易懂的方法,我不确定如何在这里使用LINQ。
就性能而言,最好能够对测试数据进行分析,以查看正则表达式和String.Split之间的实际性能差异