通过char C#拆分字符串

时间:2012-08-28 10:48:54

标签: c# regex

我有一个包含以下文字的字符串:
[l=9;f=0;r=5;p=2]
可能不止一个:
[l=9;f=0;r=5;p=2];[l=9;f=0;r=6;p=2]

我想得到字符串数组(第二个例子):

[l=9;f=0;r=5;p=2]
[l=9;f=0;r=6;p=2]

我尝试了这个,但它分裂得不正确:

Regex.Split(seat, "(?=])");

PS。 regexp不是强制性的。

6 个答案:

答案 0 :(得分:8)

string input = "[l=9;f=0;r=5;p=2];[l=9;f=0;r=6;p=2]";
var list = Regex.Matches(input, @"\[.+?\]")
            .Cast<Match>()
            .Select(m => m.Value)
            .ToList();

答案 1 :(得分:3)

以下模式可能会帮助您使用Regex的分割选项

string input = "[l=9;f=0;r=5;p=2];[l=9;f=0;r=6;p=2]";
string pattern = @"(?<=\]);";
Regex regex = new Regex(pattern);
string[] data = regex.Split(input);

答案 2 :(得分:0)

"[l=9;f=0;r=5;p=2];[l=9;f=0;r=6;p=2]".Split(new string[] { "];" }, StringSplitOptions.None)

然后将“]”追加回数组中的每个项目......

丑陋但应该工作。

答案 3 :(得分:0)

为什么不使用正则表达式捕获?

模式\[l=(\d);f=(\d);r=(\d);p=(\d)\]将捕获每个数组中的值。

示例:

private static IEnumerable<dynamic> Match(string text)
{
    return Regex.Matches(text, @"\[l=(\d);f=(\d);r=(\d);p=(\d)\]")
        .Cast<Match>()
        .Where(m => m.Success)
        .Select(m => new { l = m.Groups[1].Value, f = m.Groups[2].Value, r = m.Groups[3].Value, p = m.Groups[4].Value });
}

static void Main(string[] args)
{
    foreach (var result in Match("[l=9;f=0;r=5;p=2];[l=9;f=0;r=6;p=2]"))
        Console.Out.WriteLine("Setting: {0}, {1}, {2}, {3}", result.l, result.f, result.r, result.p);

    foreach (var result in Match("[l=9;f=0;r=5;p=2]"))
        Console.Out.WriteLine("Setting: {0}, {1}, {2}, {3}", result.l, result.f, result.r, result.p);
}

答案 4 :(得分:0)

这是LINQ方法:

Func<string, string> process = s =>
    String.Format("[{0}]",
        String.Join("];[",
            s
                .Split('[')
                .Select(x => x.Split(']'))
                .SelectMany(x => x)
                .Where(x => x != "" && x !=";")));

至少它有效。 : - )

像这样使用:

var result = process("[l=9;f=0;r=5;p=2];[l=9;f=0;r=6;p=2]");

答案 5 :(得分:0)

在您的代码中:

Regex.Split(seat, "(?=])");

好像你只是错过了你的正则表达式中的实际分号和brakcet的反斜杠。这有效:

 string[] data = Regex.Split(seat, ";(?=\\[)");