基于2个分隔符将字符串拆分为2个数组

时间:2013-12-17 12:56:46

标签: c# regex arrays string split

我想将一个字符串拆分为2个数组,一个用vbTab分隔的文本(我认为它是c#中的\t)和另一个用vbtab分隔的测试字符串(我认为它是{{1在c#)中。

通过搜索我找到了这个(StackOverFlow Question: 1254577):

\n

但是我的字符串会是这样的:

string input = "abc][rfd][5][,][.";
string[] parts1 = input.Split(new string[] { "][" }, StringSplitOptions.None);
string[] parts2 = Regex.Split(input, @"\]\[");

所以在上面的代码输入变成:

aaa\tbbb\tccc\tddd\teee\nAccount\tType\tCurrency\tBalance\t123,456.78\nDate\tDetails\tAmount\n03NOV13\tTransfer\t9,999,999.00-\n02NOV13\t\Cheque\t125.00\nDebit Card Cash\t200.00

但是如何创建一个字符串数组,其中包含第一个换行符以及另一个包含所有内容的数组?

然后第二个必须再次拆分成几个字符串数组,这样我就可以写出一个包含帐户详细信息的迷你语句,然后显示每个帐户的交易。

我希望能够获取原始字符串并在A5纸上生成类似的内容: enter image description here

2 个答案:

答案 0 :(得分:1)

以下代码应该按照您的要求执行。这导致part1有5个条目,part2有26个条目

string input = "aa\tbbb\tccc\tddd\teee\nAccount\tType\tPersonal Current Account\tCurrency\tGBP\tBalance\t123,456.78\nDate\tDetails\tAmount\n03NOV13\tTransfer\t9,999,999.00-\n02NOV13\t\Cheque\t125.00\nDebit Card Cash\t200.00\n30OCT13\tLoan Repayment\t1,234.56-\n\tType\t30-Day Notice Savings Account\tCurrency\tGBP\tBalance\t983,456.78\nDate\tDetails\tAmount\n03NOV13\tRepaid\t\250\n";

// Substring starting at 0 and ending where the first newline begins
string input1 = input.Substring(0, input.IndexOf(@"\n"));

/* Substring starting where the first newline begins
   plus the length of the new line  to the end */
string input2 = input.Substring(input.IndexOf(@"\n") + 2);

string[] part1 = Regex.Split(input1, @"\\t");
string[] part2 = Regex.Split(input2, @"\\t");

答案 1 :(得分:1)

您可以使用LINQ查询:

        var cells = from row in input.Split('\n')
                    select row.Split('\t');

您可以使用First()获取第一行,使用Skip()获取其余行。例如:

        foreach (string s in cells.First())
        {
            Console.WriteLine("First: " + s);
        }

        foreach (string[] row in cells.Skip(1))
        {
             Console.WriteLine(String.Join(",", row));
        }