分开一根长绳子

本文关键字:一根 | 更新日期: 2023-09-27 18:20:34

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"answers"S"。

嗯,不知道它是否清楚,但它似乎是如此简单,让我非常头疼。

另一个问题是,例如:"0000000000000000FS",在字符串的这一部分,我需要将"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"answers"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);

temp.ToArray()产生

[0] "Ta005000000000000000000"
[1] "Tb001700000000000000000"
[2] "Sa005000000000000000000"
[3] "Sb002500000000000000000F"
[4] "00000000000000000I"
[5] "00000000000000000N"
[6] "0000000000000000FS"
[7] "0000000000000000IS"
[8] "0000000000000000NS"
[9] "000000000000000000"
var linq = (from s in temp select s.Substring(0,23)).ToList();

等等,linq就是您想要的数组。但对于其他输入组合,这种"算法"可能会失效。

类似的东西?

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

如果您想要

,那么您只需要删除"空"元素

使用正则表达式执行此操作:

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

我不确定大括号的格式是否正确。