Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 分开一长串_C#_.net - Fatal编程技术网

C# 分开一长串

C# 分开一长串,c#,.net,C#,.net,A具有以下输入字符串: string input = "Ta005000000000000000000Tb001700000000000000000Sa005000000000000000000" + "Sb002500000000000000000F 00000000000000000I 00000000000000000N" + " 00000000000000000FS 00000000000000000IS 0000000000000

A具有以下输入字符串:

string input =
   "Ta005000000000000000000Tb001700000000000000000Sa005000000000000000000" +
   "Sb002500000000000000000F     00000000000000000I     00000000000000000N" +
   "     00000000000000000FS    00000000000000000IS    00000000000000000NS" +
   "    00000000000000000";
我需要将这个字符串分成几个部分,但是,内容差别很大

必须将此字符串放入如下列表:

[0] "Ta005000000000000000000"
[1] "Tb001700000000000000000"
[2] "Sa005000000000000000000"
[3] "Sb002500000000000000000"
[4] "00000000000000000I"
[5] "00000000000000000N"
[6] "0000000000000000FS"
[7] "0000000000000000IS"
[8] "0000000000000000NS"
[9] "000000000000000000"
在这种情况下,我只知道字符串的最大长度是23。 因此,在本例中,我需要分隔字符串返回的第一部分的'T'或'S'。或者,如果这些字符没有出现,则用空格分隔(发生在字符串返回的最后一部分)。我这样做了:

var linq = test.Split(new[] { 'T', 'S', ' ', '{', '}' }, StringSplitOptions.RemoveEmptyEntries).ToList();
我的“测试”是一个包含这些返回字符的StrintBuilder。通过这样做,我可以分开我的列表,但在本例中,我丢失了一个非常重要的信息,即“T”和“S”

嗯,我不知道它是否清晰,但它似乎很简单,让我非常头痛

Obs:另一个问题是,例如:“0000000000000000 FS”,在字符串的这一部分中,我需要同时维护“FS”


感谢您的关注,

拆分将删除拆分字符。只需按如下所示替换这些字符即可插入空格,然后在空格字符处拆分:

var linq = myRates.Replace("T"," T").Replace("S"," S").Split(new[] { ' ', '{', '}' }, StringSplitOptions.RemoveEmptyEntries).ToList();

编辑

这个规则很复杂。也许这能解决你的问题

string input =
   "Ta005000000000000000000Tb001700000000000000000Sa005000000000000000000" +
   "Sb002500000000000000000F     00000000000000000I     00000000000000000" +
   "N     00000000000000000FS    00000000000000000IS    00000000000000000" +
   "NS    00000000000000000";
第一步:在“”处拆分

string[] spaceSplit = input.Split(' ', StringSplitOptions.RemoveEmptyEntries);
现在
spaceSplit
如下所示:

[0] "Ta005000000000000000000Tb001700000000000000000Sa005000000000000000000Sb002500000000000000000F"
[1] "00000000000000000I"
[2] "00000000000000000N"
[3] "0000000000000000FS"
[4] "0000000000000000IS"
[5] "0000000000000000NS"
[6] "000000000000000000"
现在,如果每行长度超过23个字符,请按“T”和“S”拆分

List<string> temp = new List<string>();
foreach(string s in spaceSplit)
  if (s.Length>23)
    temp.AddRange(s.Replace("T", " T").Replace("S", " S").Split(' '));
  else
    temp.Add(s);
等等,
linq
就是你想要的数组。但对于其他输入组合,此“算法”可能会中断。

类似的情况

string[] separatedString = Regex.Split(s, @"(?=[TS ])") ;

然后,如果您想使用正则表达式执行此操作,只需删除“空”元素即可:

string[] parts = Regex.Split(test, @"(?<=[TS\s\{\})");

string[]parts=Regex.Split(test,@”(?重复问题:你确定你的部分字符串只能以“T”或“S”开头吗?输入字符串的最后一部分看起来与第一部分不同。是的,你是对的。我唯一知道的是字符串的最大长度是23。我要编辑我的问题。你的第四个字符串不应该以“F”开头吗?如果它们是23个字符长的话,那么你的例子4-9呢?它们比较短。如果它们可以以“S”结尾,这不应该是下一个的起始字符吗???几秒钟后,请告诉我!就我所知,这确实是这里的OP所追求的。对于那些:像它这样的人…我也在熟悉地址上的正则表达式,并且有这个l我的“测试”解决方案中已经有一行代码:)是的,它可以部分工作。问题是,例如:“000000000000 FS”,在字符串的这一部分,我需要一起维护“FS”。使用此代码,我需要维护的“S”总是分开的。@默认值是“n”重复,因为情况有点不同:(是的,我知道,正则表达式要好得多,但我记不住这些东西:)它就像一颗神秘的银弹,让我毛骨悚然……取决于后来维护代码的人是否知道正则表达式:)我会比正则表达式更好地理解这段代码。是的,它可以部分工作。问题是,例如:“0000000000000000 FS,在字符串的这一部分中,我需要一起维护“FS”。使用此代码,我需要维护的“S”总是分开的。你明白吗?是的,我明白。但也许你应该重新表述你的问题,因为拆分条件不清楚……是的,我知道,但很难解释:(,但是,使用它,我有:[6]“00000000000000000F”和[7]“S”。我必须把这两部分放在一起
string[] parts = Regex.Split(test, @"(?<=[TS\s\{\})");