gpt4 book ai didi

c# - 修复 RegEx Split() 函数 - 空字符串作为第一个条目

转载 作者:太空狗 更新时间:2023-10-29 23:47:16 28 4
gpt4 key购买 nike

预先编写代码以可视化我面临的问题:

  1. 这是需要拆分的文本。
:20:0444453880181732
:21:0444453880131350
:22:CANCEL/ABCDEF0131835055
:23:BUY/CALL/E/EUR
:82A:ABCDEFZZ80A
:87A:4444655604
:30:061123
:31G:070416/1000/USNY
:31E:070418
:26F:PRINCIPAL
:32B:EUR1000000,00
:36:1,31000000
:33B:USD1310000,00
:37K:PCT1,60000000
:34P:061127USD16000,00
:57A:ABCDEFZZ80A

这是我的正则表达式

 Regex r = new Regex(@"\:\d{2}\w*\:", RegexOptions.Multiline);

MatchCollection matches = r.Matches(Content);
string[] items = r.Split(Content);

// ----- Fix for first entry being empty string.
int index = items[0] == string.Empty ? 1 : 0;

foreach (Match match in matches)
{
MessageField field = new MessageField();

field.FieldIdExtended = match.Value;
field.Content = items[index];

Fields.Add(field);

index++;
}

正如您从评论中看到的那样,问题出现在拆分字符串时。它作为第一项返回一个空字符串。有什么优雅的方法可以解决这个问题吗?

谢谢,迪米

最佳答案

出现此行为的原因是拆分的第一个分隔符之前没有任何内容,而第一个条目是空白。

正确解决这个问题的方法可能是在正则表达式中捕获您想要的值,然后从您的匹配集中获取它。

粗略的初步猜测,您可能想要这样的东西:

Regex r = new Regex(@"^:(?<id>\d{2}\w*):(?<content>.*)$", RegexOptions.Multiline);

MatchCollection matches = r.Matches(Content);

foreach (Match match in matches)
{
MessageField field = new MessageField();

field.FieldIdExtended = match.Groups["id"].ToString()
field.Content = match.Groups["content"].ToString();

Fields.Add(field);

}

命名捕获组的使用使得提取内容变得容易。您可能需要根据需要调整正则表达式。目前它获取 20 作为 id 和 0444453880181732 作为内容。我不是 100% 清楚您需要捕获的内容,但您使用正则表达式看起来没问题,所以我认为这不是问题。 :)

从本质上讲,在这里您并不是真的要拆分内容,而是要匹配内容并将其拉出。

关于c# - 修复 RegEx Split() 函数 - 空字符串作为第一个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12093427/

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