使用正则表达式在C#中的字符串内拆分字符串

时间:2014-05-09 09:53:57

标签: c# regex

我有一个类似于
的字符串 SOI; 1; 2; 3; 4; 5; 6; 7; SOI; 8; 9; 10; 11; 12; EOI; 13;的 EOI; SOI; 14; 15; 16; 17; 18;的 EOI;

这里我必须从SOI开始分割字符串;到EOI;
输出应该像

[0] - 1; 2; 3; 4; 5; 6; 7; 13;
[1] - 8; 9; 10; 11; 12;
[2] - 14; 15; 16; 17; 18;

我尝试使用以下代码进行拆分

string regexexpr = "(?s)(?<=SOI;).+?(?=EOI;)";//@"SOI;(.*?)EOI;";
string sText = "SOI; 1; 2; 3; 4; 5;  6; 7;SOI; 8; 9; 10; 11; 12; EOI; 13; EOI; SOI; 14; 15; 16; 17; 18; EOI;";
MatchCollection matches = Regex.Matches(sText, @regexexpr);
var sample = matches.Cast<Match>().Select(m => m.Value);

但我得到的输出就像是 [0] - 1; 2; 3; 4; 5; 6; 7; SOI; 8; 9; 10; 11; 12;
[1] - 14; 15; 16; 17; 18;

请为我提供更好的解决方案。 感谢

2 个答案:

答案 0 :(得分:0)

我想我会在程序上这样做,而不是使用正则表达式。

编辑:以下解决方案有错误,第一个和第三个列表是相同的。我要离开了,因为它可能仍然是朝着正确方向的暗示。

1)将值设置为零 2)读取字符串中的下一个标记 3)如果令牌是SOI,则将值1加1 4)如果令牌是EOI,则从值
中删除1 5)如果token是数字,则根据Value将其添加到不同的数组(或列表)中 6)GOTO 2

答案 1 :(得分:0)

    private static List<string> GetLists(string sText)
    {
        string[] output;
        List<string> input = new List<string>();
        input = sText.Split(new string[] {" "}, StringSplitOptions.RemoveEmptyEntries).ToList();
        int count = input.Count(x => x == "SOI;");
        output = new string[count]; // set output array to number of lists in string
        int current = -1;  // start with -1 so first SOI will set it on 0
        int max = -1;
        foreach (var text in input)
        {
            if (text == "SOI;") // set current and max
            {
                current++;
                max++;
            }
            else if (text == "EOI;")
            {
                current--;
                if (current == -1)  // if u reached -1 it means u are out of any list so set current on max so if u will get "SOI" u will get proper number
                {
                    current = max;
                }
            }
            else
            {
                output[current] += text;
            }
        }

        return output.ToList();
    }
}