我有一個包含以下文本字符串:
[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。正則表達式不是強制性的。
我有一個包含以下文本字符串:
[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。正則表達式不是強制性的。
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();
這是我需要的。謝謝 – user1260827
@ user1260827如果這對你有效,請接受/標記爲答案。 – chridam
@chridam:當然可以。請等5分鐘後再說。 – user1260827
"[l=9;f=0;r=5;p=2];[l=9;f=0;r=6;p=2]".Split(new string[] { "];" }, StringSplitOptions.None)
然後追加「]」回陣列中的每個項目...
醜,但應該工作。
你應該提到,然後OP將需要添加]爲他的元素在陣列 – JleruOHeP
@ nnher:否第一個元素將是相等的[[l = 9; f = 0; r = 5; p = 2] – user1260827
正確,所以追加「]」應該做的伎倆..當然不是最優雅的解決方案。 – niaher
爲什麼不使用正則表達式捕獲?
模式\[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);
}
下面的模式可以幫助您使用正則表達式的拆分選項
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);
這裏有一個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]");
在您的代碼:
Regex.Split(seat, "(?=])");
好像你只是缺少實際的分號,併爲brakcet反斜槓,從正則表達式。這工作:
string[] data = Regex.Split(seat, ";(?=\\[)");
你需要使用'正則表達式'語法?向我們展示你想要的結果 – harry180
@ harry180:結果顯示有問題,我想獲得數組 – user1260827
1維數組還是2維數組?或者你想要一個'字典'? –
harry180