我对其中进口数千行的应用,其中每行有这样的格式工作:C#Regex.Split:删除空的结果
|* 9070183020 |04.02.2011 |107222 |M/S SUNNY MEDICOS |GHAZIABAD | 32,768.00 |
我使用以下Regex
分割线的数据我需要:
Regex lineSplitter = new Regex(@"(?:^\|\*|\|)\s*(.*?)\s+(?=\|)");
string[] columns = lineSplitter.Split(data);
foreach (string c in columns)
Console.Write("[" + c + "] ");
这是给我以下结果:
[] [9070183020] [] [04.02.2011] [] [107222] [] [M/S SUNNY MEDICOS] [] [GHAZIABAD] [] [32,768.00] [|]
ñ我有两个问题。
1.如何删除空的结果。我知道我可以使用:
string[] columns = lineSplitter.Split(data).Where(s => !string.IsNullOrEmpty(s)).ToArray();
但没有任何内置的方法来删除空的结果吗?
2.如何取下最后一根管子?
感谢您的任何帮助。
Regards,
Yogesh。
编辑:
我觉得我的问题有点误解。这从来没有关于我怎么能做到这一点。这只是大约我怎么能通过更改Regex
在上面的代码。
我知道我可以在很多方面做到这一点。我已经与具有Where
子句和与这也是一种替代方法(两次以上)上述代码进行更快:
Regex regex = new Regex(@"(^\|\*\s*)|(\s*\|\s*)");
data = regex.Replace(data, "|");
string[] columns = data.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
其次,作为测试的情况下,我的系统可以解析92K +这样线在原始方法中少于1.5秒,而在第二种方法中少于700毫秒,在这里我永远不会发现超过几千的实际情况,所以我不认为我需要在这里考虑速度。在我看来,在这种情况下考虑速度是不成熟的优化。
我已经找到了答案,我的第一个问题:它不能与Split
来完成,因为是建立在没有这样的选择
还在寻找答案,我的第二个问题。
要回答你的第一个问题,我相信正则表达式的分组部分应该是`@“(。+?)”`。否则就可能匹配空白(这是你现在拥有的)。 – 2011-02-06 08:38:14
在这种情况下,杰夫很难处理。它会给出完全相同的结果。 – Yogesh 2011-02-06 08:41:24
就像你提到成千上万的条目一样:使用String.Split然后再做一些String处理比使用正则表达式要快得多。 – Foxfire 2011-02-06 11:57:21