2012-08-28 90 views
1

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

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

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

我试过,但它分裂无法正常:

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

PS。正则表达式不是强制性的。

+0

你需要使用'正则表达式'语法?向我们展示你想要的结果 – harry180

+0

@ harry180:结果显示有问题,我想获得数组 – user1260827

+0

1维数组还是2维数组?或者你想要一个'字典'? – harry180

回答

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(); 
+0

这是我需要的。谢谢 – user1260827

+1

@ user1260827如果这对你有效,请接受/标记为答案。 – chridam

+1

@chridam:当然可以。请等5分钟后再说。 – user1260827

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

然后追加“]”回阵列中的每个项目...

丑,但应该工作。

+2

你应该提到,然后OP将需要添加]为他的元素在阵列 – JleruOHeP

+0

@ nnher:否第一个元素将是相等的[[l = 9; f = 0; r = 5; p = 2] – user1260827

+0

正确,所以追加“]”应该做的伎俩..当然不是最优雅的解决方案。 – niaher

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); 
} 
3

下面的模式可以帮助您使用正则表达式的拆分选项

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); 
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]"); 
0

在您的代码:

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

好像你只是缺少实际的分号,并为brakcet反斜杠,从正则表达式。这工作:

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