2012-08-28 132 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, ";(?=\\[)");