gpt4 book ai didi

C# 正则表达式.Split : Removing empty results

转载 作者:IT王子 更新时间:2023-10-29 04:11:07 26 4
gpt4 key购买 nike

我正在开发一个导入数千行的应用程序,其中每一行的格式如下:

|* 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。如何移除最后一根管道?

谢谢你的帮助。
问候,
约格什。

编辑:
我认为我的问题有点被误解了。这从来都不是关于我能怎么做。只是关于如何通过更改上面代码中的 Regex 来做到这一点

我知道我可以通过多种方式做到这一点。我已经使用上面提到的带有 Where 子句的代码和另一种速度也快(超过两倍)的替代方法来完成它:

Regex regex = new Regex(@"(^\|\*\s*)|(\s*\|\s*)");
data = regex.Replace(data, "|");

string[] columns = data.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries);

其次,作为测试用例,我的系统在原始方法中可以在不到 1.5 秒的时间内解析 92k+ 这样的行,在第二种方法中不到 700 毫秒,我在真实方法中永远找不到超过几千行案例,所以我认为我不需要考虑这里的速度。在我看来,在这种情况下考虑速度是过早的优化。

我找到了第一个问题的答案:它不能用 Split 完成,因为没有内置这样的选项。

仍在寻找我的第二个问题的答案。

最佳答案

Regex lineSplitter = new Regex(@"[\s*\*]*\|[\s*\*]*");
var columns = lineSplitter.Split(data).Where(s => s != String.Empty);

或者你可以简单地做:

string[] columns = data.Split(new char[] {'|'}, StringSplitOptions.RemoveEmptyEntries);
foreach (string c in columns) this.textBox1.Text += "[" + c.Trim(' ', '*') + "] " + "\r\n";

不,没有像 String.Split 那样删除 RegEx.Split 的空条目的选项。

您也可以使用火柴。

关于C# 正则表达式.Split : Removing empty results,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4912365/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com