【问题标题】:split string in substring using a string delimiter使用字符串分隔符将字符串拆分为子字符串
【发布时间】:2015-12-28 10:46:27
【问题描述】:

我有一个字符串消息,可能是这样的

"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.. } 

【问题讨论】:

  • 预期的结果是什么?
  • 预期结果应该是一个子字符串数组,例如:{ "TRX00 abcd 20150921 ", "TRX00 abcd 20150921 ", 等等。}
  • 修剪然后拆分用于分隔组的 4 个空格 " "。
  • 为什么效果不好?
  • 每个子串中的字符数可能每次都不一样。唯一相同的部分是分隔符“TRX”

标签: c# string winforms split


【解决方案1】:

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

(?!^)(?=TRX)

只要它不在字符串的开头,它就会在 TRX 上拆分并返回:

TRX00 abcd 20150921

TRX00 abcd 20150921

TRX00 abcd 20150921

【讨论】:

  • 这个正则表达式模式就像一个魅力!谢谢@dustmouse
【解决方案2】:

显然,所需的字符串长度为 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);
}

【讨论】:

  • 我计算的长度是 20,而不是 19。
  • 长度每次都可以不同,唯一相同的部分是分隔符“TRX”
【解决方案3】:

如果您确实将“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)),因为在此示例中它只是一个空字符串。

【讨论】:

    猜你喜欢
    • 2017-06-27
    • 2014-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 2018-09-10
    相关资源
    最近更新 更多