使用字符串分隔符在子字符串中拆分字符串

时间:2015-09-30 15:09:48

标签: c# string winforms split

我有一个字符串消息,可能就像

"TRX00  abcd 20150921    " 

或喜欢(n)次该字符串,即。

"TRX00  abcd 20150921    TRX00  abcd 20150921    TRX00  abcd 20150921    " 

等。

如何在每个子字符串的开头使用"TRX"像分隔符一样在(n)字符串中拆分该字符串?

我想在子字符串中使用分隔符"TRX"

我已经做了以下但是效果不好......

string msg = "TRX00  abcd 20150921    TRX00  abcd 20150921    TRX00  abcd 20150921    ";

string[] _msg;
string pattern = "(TRX)";
string msg2 = "";

if(msg.Contains("TRX"))
{
    _msg = Regex.Split(msg, pattern);

    foreach (string ok in _msg)
    {
        msg2 = ok;
        MessageBox.Show(msg2);
    }
}

预期结果应该是一个子串数组,如:

{ "TRX00 abcd 20150921 ", "TRX00 abcd 20150921 ", etc.. } 

3 个答案:

答案 0 :(得分:3)

您可以在代码中使用此模式,而不是(TRX)

(?!^)(?=TRX)

只要它不在字符串的开头并且返回:

,它将在TRX上分割
  

TRX00 abcd 20150921

     

TRX00 abcd 20150921

     

TRX00 abcd 20150921

答案 1 :(得分:0)

如果您确实将“TRX”视为分隔符,则可以使用它来分割字符串,例如:

string msg = "TRX00  abcd 20150921    TRX00  abcd 20150921    TRX00  abcd 20150921    ";
string[] strings = msg.Split(new[] { "TRX" }, StringSplitOptions.None)
                      .Select(x => "TRX" + x)
                      .Skip(1)
                      .ToArray();

然后,您可以转换该分隔集合并重新添加“TRX”。注意我跳过第一个元素(Skip(1)),就像在这个例子中那样只是空字符串。

答案 2 :(得分:0)

显然,所需的字符串长度为19个字符;只要输入的总长度如下所示,您就可以截断开头;但是这种解决方案对输入格式的改变不是很强大,这使得它有问题。

List<String> Messages = new List<String>();
while (msg.length > 19)
{
    var Message = msg.Substring(19);
    Messages.Add(Message);
    msg = msg.Substring(20, msg.Length-1);
}