Abe*_*ler 14 .net parsing split
如果我有一个带有基本分隔符的分隔文本文件(|
例如),它是否会影响我是使用String
还是Regex
拆分?
我会看到一个与另一个的性能提升吗?
我假设你想要使用,Regex.Split
如果你有escaped
你不想拆分的分隔符(\|
例如).
使用Regex.Split
vs 还有其他原因String.Split
吗?
Joh*_*her 14
Regex.Split功能更强大,但对于具有基本分隔的排列(使用字符串中不存在的字符),String.Split函数更容易使用.
就性能而言,你必须创建一个测试并试一试.但是,不要预先优化,除非你知道这个功能将成为某些必要过程的瓶颈.
默认情况下,String.Split
除非您有一些复杂的要求,否则我会使用正则表达式来导航。当然,正如其他人提到的,根据您的需求对其进行配置。一定要分析有和没有太RegexOptions.Compiled
,并了解它是如何工作的。查看编译或不编译,RegexOptions.Compiled 是如何工作的?,并搜索有关该主题的其他文章。
其优点之一String.Split
是它StringSplitOptions.RemoveEmptyEntries
可以在分隔符之间不存在数据的情况下删除空结果。相同分割字符串/字符的正则表达式模式将具有多余的空条目。它很小,可以通过简单的 LINQ 查询来处理以过滤String.Empty
结果。
也就是说,如果您需要的话,正则表达式可以非常轻松地包含分隔符。这是通过在模式周围添加括号()
使其成为捕获组来实现的。例如:
string input = "a|b|c|d|e|f";
foreach (var s in Regex.Split(input, @"\|"))
Console.WriteLine(s);
Console.WriteLine("Include delimiter...");
// notice () around pattern
foreach (var s in Regex.Split(input, @"(\|)"))
Console.WriteLine(s);
Run Code Online (Sandbox Code Playgroud)
您可能会发现这个问题也很有帮助:How do I split a string by strings and include the delimiters using .NET?
似乎对于简单的场景string.Split()
会更好。我在 Benchmark .NET 中进行了测试
方法 | 意思 | 错误 | 标准差 | 中位数 |
---|---|---|---|---|
正则表达式拆分 | 486.47 纳秒 | 9.769 纳秒 | 24.15 纳秒 | 481.72 纳秒 |
分裂 | 84.76 纳秒 | 4.503 纳秒 | 13.21 纳秒 | 81.12 纳秒 |
方法 | 意思 | 错误 | 标准差 |
---|---|---|---|
正则表达式拆分 | 182.10 纳秒 | 2.091 纳秒 | 1.956 纳秒 |
分裂 | 50.29 纳秒 | 0.709 纳秒 | 0.663 纳秒 |
注意:不是在同一个硬件上运行,所以 dotnet 版本之间的性能相对差异比绝对差异更重要。
public class RegexVsSplit
{
private readonly string data = "host:7000";
public RegexVsSplit()
{
}
[Benchmark]
public string[] RegexSplit() => Regex.Split(data, ":");
[Benchmark]
public string[] Split() => data.Split(':');
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17502 次 |
最近记录: |