我想做这样的事情:
我的字符串示例:“某事; 123:somethingelse; 156:somethingelse2; 589:somethingelse3”
我想从字符串示例中获取一个包含值的数组。这些值介于“;”之间和“:”:123,156,589
我试过这个,但我不知道如何迭代以获取所有事件:
string str = stringExample.Split(';', ':')[1];
string[i] arr = str;
感谢您帮助我。
答案 0 :(得分:2)
LINQ是你的朋友,就像这样:
str.Split(';').Select(s => s.Split(':')[0]).Skip(1)
答案 1 :(得分:1)
您可以使用这样的正则表达式:
Regex r = new Regex(@";(\d+):");
string s = "something;123:somethingelse;156:somethingelse2;589:somethingelse3";
foreach(Match m in r.Matches(s))
Console.WriteLine(m.Groups[1]);
;(\d+):
匹配;
和:
之间的一个或多个数字,而Groups[1]
选择brackest内的内容,而不是数字。
输出:
123
156
589
要将这些字符串转换为数组,请使用:
string[] numberStrings = r.Matches(s).OfType<Match>()
.Select(m => m.Groups[1].Value)
.ToArray();
答案 2 :(得分:1)
我会使用命名组:
string stringExample = "something;123:somethingelse;156:somethingelse2;589:somethingelse3";
Regex r = new Regex(";(?<digit>[0-9]+):");
foreach (Match item in r.Matches(stringExample))
{
var digit = item.Groups["digit"].Value;
}
答案 3 :(得分:0)
所以你想要提取所有3个数字,你可以使用这种方法:
string stringExample = "something;123:somethingelse;156:somethingelse2;589:somethingelse3";
string[] allTokens = stringExample.Split(';', ':'); // remove [1] since you want the whole array
string[] allNumbers = allTokens.Where(str => str.All(Char.IsDigit)).ToArray();
结果是:
allNumbers {string[3]} string[]
[0] "123" string
[1] "156" string
[2] "589" string
答案 4 :(得分:0)
这听起来像正则表达式的完美案例。
var sample = "something;123:somethingelse;156:somethingelse2;589:somethingelse3";
var regex = new Regex(@"(?<=;)(\d+)(?=:)");
var matches = regex.Matches(sample);
var array = matches.Cast<Match>().Select(m => m.Value).ToArray();